日期:2014-05-16  浏览次数:20886 次

mysql主从配置

【测试环境如下】

master端(ip为192.168.0.5):virtualbox下的ubuntu 10.0.4,mysql为5.5版本。

slave端(ip为192.168.0.3):xp系统,mysql为5.5版本。

?

【过程】

1.保证master端的防火墙对slave端ip开放3306端口(这一步可以最后做的):

#iptables -A INPUT -p tcp --dport 3306 -s 192.168.0.3 -j ACCEPT

在xp下,用mysql -u[用户名] -p[密码] -h[ip地址] ,可以试一下能不能连接。

?

2.修改master的$MYSQL_HOME$/etc/my.cnf 文件,添加内容:

server-id=1
log-bin=mysql-bin
?

3.进入mysql,给slave授予权限

mysql > GRANT REPLICATION SLAVE ON *.* TO 'slave001'@'192.168.0.3' IDENTIFIED BY '123456';

这样,slave端即可用slave001,123456来配置访问master端。

?

4.master端设置读锁,读取日志文件名和偏移量;备份要同步的数据库(此处备份test);然后解锁

mysql > flush tables with read lock;

mysql > show master status;? ? ? ?? //得到File为mysql-bin.000003, Position为1778

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |     1778 |              |                  |
+------------------+----------+--------------+------------------+
?

然后用mysqldump工具导出数据文件,

mysqldump -uroot -p test > test.sql

mysql > unlock tables;

?

5.修改slave的my.ini文件

server-id=2

?

6.进入slave端的mysql

导入刚才master端备份的test.sql

mysql > source d:\test.sql????? // 这里假定刚才master端导出的test.sql已经放置到了slave端的d:\test.sql

?

7.对slave端相应设置,进入slave端的mysql,

mysql >? change master to master_host='192.168.0.5';
mysql >? change master to master_user='slave001';
mysql >? change master to master_password='123456';
mysql >? change master to master_port=3306;
mysql >? change master to master_log_file='mysql-bin.000003';
mysql >? change master to master_log_pos=1778;

?

8.看一下slave端的状态是否正常。

mysql >? show slave status/G;

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.5
                  Master_User: slave001
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
?

9.测试

?进入master命令行,执行一条建表语句
?【mysql>】use test;
?【mysql>】create table cxl(`id` int(11) primary key);
?进入slave查看test库中是否有cxl表
?【mysql>】use test;
?【mysql>】show tables;
?若列表中有cxl表,说明配置主从数据库成功。

?

ps:

上面的从机是windows xp环境,slave端配置貌似只能通过类似“change master to .......”的方式进行配置。

如果从机也是linux环境,slave端配置,可以修改my.cnf的内容进行配置(未进行试验),内容例如:

server-id?????????????? = 2
master-host???? =192.168.0.5
master-user???? =slave0001
master-pass???? =123456
master-port???? =3306
master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)
replicate-do-db =test #只复制某个库
replicate-ignore-db=mysql #不复制某个库