第一步:
1.1 环境搭建
准备两台Windows NT 主机,分别安装好iKEY Server windows 版本,确定版本无误,确保mysql服务正常启动,确保两台主机处于同一个局域网中,确定好哪台做为主、备机器,假设A为主机,B为备机,假设A主机IP地址为:192.168.1.101,B主机IP地址为192.168.1.102
第一步:
在A数据库的my.ini中添加
复制代码代码如下:
server-id=1
log-bin=C:\mysqlback #同步事件的日志记录文件
binlog-do-db=test1 #提供数据同步服务的数据库
binlog-do-db=test2 #提供数据同步服务的数据库
binlog-do-db=test3 #提供数据同步服务的数据库
master-host=192.168.0.102 #主机B的地址
master-user=use102 #主机B提供应B的用户,该用户中需要包括数据库test1 test12test3的权限
master-password=usepwd102 #访问密码
master-port=3306 #端口,主机的MYSQL端口
master-connect-retry=60 #重试间隔60秒
replicate-do-db=test1 #同步的数据库
replicate-do-db=test2 #同步的数据库
replicate-do-db=test3 #同步的数据库
第二步:
在B数据库的my.ini中添加
复制代码代码如下:
server-id=2
log-bin=C:\mysqlback #同步事件的日志记录文件
binlog-do-db=test1 #提供数据同步服务的数据库
binlog-do-db=test2 #提供数据同步服务的数据库
binlog-do-db=test3 #提供数据同步服务的数据库
master-host=192.168.0.101 #主机A的地址
master-user=use101 #主机A提供给A的用户,该用户中需要包括数据库test1 test12test3的权限
master-password=usepwd101 #访问密码
master-port=3306 #端口,主机的MYSQL端口
master-connect-retry=60 #重试间隔60秒
replicate-do-db=test1 #同步的数据库
replicate-do-db=test2 #同步的数据库
replicate-do-db=test3 #同步的数据库
第三步:
将A的mysql数据的权限给B
mysql>GRANT FILE ON *.* TO 'use101'@'192.168.0.102'IDENTIFIEDBY 'pwd101';
将B的Mysql数据的权限给B操作同上。
第四步:
重启AB数据库,后:
B机器:
mysql>slave start;
查看同步配置情况
A机器:
mysql>show master status\G;
B机器:
mysql>show slave status\G;
将A的mysql数据的权限给B
mysql>GRANT FILE ON *.* TO 'use101'@'192.168.0.102'IDENTIFIEDBY 'pwd101';
将B的Mysql数据的权限给B操作同上。
第四步:
重启AB数据库,后:
B机器:
mysql>slave start;
查看同步配置情况
A机器:
mysql>show master status\G;
B机器:
mysql>show slave status\G;
Slave_SQL_Running NO 的解决方案。
mysql 备机跳过执行一条语句:set global sql_slave_skip_counter=1
1可以为N.
用来跳过备机的一条或N条出错的复制语句。然后重新start slave即可。
查看Slave状态:
mysql
>
show master status;
+------------------+-----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| mysql - bin . 000020 | 135617781 | | |
+------------------+-----------+--------------+------------------+
1 row in set ( 0.00 sec)
+------------------+-----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| mysql - bin . 000020 | 135617781 | | |
+------------------+-----------+--------------+------------------+
1 row in set ( 0.00 sec)
mysql
>
slave stop;
mysql > set GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 ;
mysql > slave start;
mysql > set GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 ;
mysql > slave start;
二、2010-01-04
1.问题:收到报警,从数据库在同步的过程出现问题,已停止同步。
分析:查看从数据库的错误日志,找到如下信息:
091229 11:49:41 [ERROR] Error reading packet from server: Got packet bigger than 'max_allowed_packet' bytes ( server_errno=2020)
解决办法:1.增加/etc/my.cnf 中的max_allowed_packet,增加他的大小,我修改为10M,然后,重启服务器。
2.为了不影响业务,直接在数据库里面,修改max_allowed_packet的大小
mysql>set GLOBAL max_allowed_packet=10475520; (注意不能直接写成10M)
mysql>change master to master_host='192.168.1.203',master_user='yang', master_password='yang', master_port=3306, master_log_file='mysql-bin.000018',master_log_pos=395332157;
(注:master_log,master_log_pos的值要设置成停止同步的那个位置,不然会造成,数据不一致)
mysql>slave start;
3.在同步过程中,又出现了一个错误:
[ERROR] Slave: Error 'Duplicate entry '18923' for key 1' on query.
解决方法:1.查找主数据库对应位置的操作记录
#/opt/mysql/bin/mysqlbinlog ../log/bin.000009 --start-position=100 --stop-position=110
(分析binlog 日志)
(分析binlog 日志)
#在从数据库删除重复记录,然后,在change master,OK,问题解决了。