系统环境:Windows XP/Windows Server 2003
MYSQL版本 5.0.18
A:主服务器Master
IP地址:192.168.1.101
B:从服务器Slave
IP地址:任意IP
配置过程
1. 在主服务器Master的数据库上创建一个备份用户,命令如下:
mysql>GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* to 'backup'@'%'IDENTIFIED BY 'backup';
在从服务器Slave上做连接测试: mysql -h 192.168.1.101 -u backup -p ,输入密码backup测试连接登陆)。
2. 对主服务器Master的配置进行修改,打开mysql安装路径下的my.ini文件,在[mysqld]下面添加如下内容:
l server-id=1 #主数据库Master的ID
l log-bin=D:\mysqllog\log-bin.log #二进制变更日志,需在D盘县创建mysqllog文件夹
l binlog-do-db= dbname #需要同步的数据库名
l binlog-ignore-db=mysql, test #不需要同步的数据库名
3. 重启主服务器Master的mysql服务
4. 对主服务器Master进行加锁控制(加锁后,在解锁前不要关闭该工作台),命令如下:
mysql>FLUSH TABLES WITH READ LOCK;
5. 导出主服务器Master数据库mysqldump -u root -p dbname> dump1.sql
6. 查看主服务器的状态,命令为:mysql> show master status\G,记录File 和 Position 项的值。
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
| log-bin.000001 | 98 | | |
+------------------+----------+--------------+------------------+
7. 将导出的数据库文件导入到从服务Slave,确保主从服务器数据库数据一样。
mysql -u root -p dbname< dump1.sql
8. 对从服务器Slave的配置进行修改,打开mysql安装路径下的my.ini文件,在[mysqld]下面添加如下内容:
l server-id=2 #从服务器Slave的ID值。注意不能和主服务器Master的ID值相同。若有多个从机,则该项的值递增,且不重复
l master-host=192.168.1.101 #主服务器Master的IP地址
l log-bin=D:\mysqllog\log-bin.log #二进制变更日志,需在D盘县创建mysqllog文件夹
l master-user=backup #从服务器Slave连接主服务器Master的帐号
l master-password=backup #从服务器Slave连接主服务器Master的帐号密码
l master-port=3306 #主服务器Master端口
l master-connect-retry=5 #同步时间间隔为5秒
l replicate-do-db= dbname #需要同步的数据库
l binlog-ignore-db=mysql,test #不需要同步的数据库
9. 重启从服务器Slave的Mysql服务。
10. 在从服务器Slave上关闭同步线程,命令为:mysql> Stop Slave。
11. 在从服务器Slave上执行下面的语句,以第六步中记录的实际值替换选项值: mysql> CHANGE MASTER TO
MASTER_LOG_FILE='log-bin.000001',MASTER_LOG_POS=98;
注:MASTER_LOG_FILE和MASTER_LOG_POS分别为步骤6所记录的File和Position值。
12. 确认同步设置都正确后,在从服务器Slave上开启同步线程,命令为:
mysql> Start Slave。
14. 在从服务器检查同步是否正常,命令为:
mysql>show slave status\G;
15. 确认一切正常后,对主服务器Master进行解锁,命令如下:
mysql> UNLOCK TABLE;
16. 至此所有设置全部完成。更新主服务器Master中的数据,从服务器Slave中也会立刻进行同步更新。
三、 检查
检测是否同步与排错可用以下命令查看:
1、在从服务器Slave上 输入:show slave status\G
主要查看:
Slave_IO_Running: Yes
(#注:如果这个为NO,可重新修改my.ini 中相关slave的配置信息,重新启动查看 slave的状态还是显示未修改的数据,因为第一次是读取my.ini,之后就会在mysql/下生成一个master.info 的文件,因此第二次就不会读取my.ini 的内容,而是读取master.info中的内容,为此要想使重新修改的my.ini生效的话,删除master.info文件 ,重起mysql既可解决。如果不能解决则可能是彼此之间的通讯问题或其它。)
Slave_SQL_Running: Yes
(#注:如果这里为NO,很有可能是因为你的A库和B库的数据库不一致造成的。停止主从服务器MYSQL服务后删除A库中所有log-bin.log文件和B库所有的relay_log文件 并重启AB服务器即可解决)
Seconds_Behind_Master是否为0,0就是已经同步
2、在主服务器Master上输入show processlist\G
mysql> show processlist\G
*************************** 1. row ***************************
Id: 2
User: backup
Host: 192.168.1.102:3341
db: NULL
Command: Binlog Dump
Time: 849
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
*************************** 2. row ***************************
如果出现Command: Binlog Dump,则说明配置成功。
3、若中心主服务器的IP发生变化,可以通过以下命令在从服务器段重新指定中心主服务器的IP和同步日志位置,过程如下:
1. 对主服务器Master进行加锁控制(加锁后,在解锁前不要关闭该工作台),命令如下:
mysql>FLUSH TABLES WITH READ LOCK;
2. 查看主服务器Master的最新状态,命令为:mysql> show master status\G,记录File 和 Position 项的值。
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
| log-bin.000007 | 23356 | | |
+------------------+----------+--------------+------------------+
注:上面的File 和 Position 项的值已经发生了变化。
3. 在从机停止同步线程,命令为:mysql>stop slave;
4. 在从机更改同步主机IP、日志名和更新位置,命令为:
mysql>change master to MASTER_HOST='new_ip',
MASTER_LOG_FILE='new_log_name', MASTER_LOG_POS=new_log_pos;
注:new_ip为中心主服务器新的IP地址,new_log_name为第二步中记录的File项的值,new_log_pos为第二步中记录的Position项的值
5. 6. 确认正确后,在从服务器开启同步线程,命令为:mysql> start slave;
7. 在从服务器检查新的同步是否正常,命令为:
mysql>show slave status\G;
8. 一切正常后,对主服务器Master进行解锁,命令如下:
mysql>UNLOCK TABLE;