MySQL数据同步配置
MySQL数据同步配置
----------------------
要求MySQL版本>=3.23.54
<...>指代变量
1、Master端配置:
Slave同步账号权限:
GRANT FILE ON
1<databasename>.<tablename> TO <user>@<slavehost> IDENTIFIED BY '<password>';
2或者
3INSERT INTO user VALUES('<slavehost>','<user>',password('<password>'),'N','N','N','N','N','N','N','N','N','Y','N','N','N','N');
4FLUSH PRIVILEGES;
5
6Master启动配置文件:
7[mysqld]
8log-bin
9binlog-do-db=<databasename>
10server-id=<masterid,例如1>
11
12或者:
13[mysqld]
14log-bin
15replicate-wild-do-table=<databasename>.<tablename>
16replicate-wild-ignore-table=<databasename>.<tablename>
17server-id=<masterid,例如1>
18
192、Slave端配置
20
21Slave启动配置文件:
22[mysqld]
23master-host=<masterhost>
24master-user=<user>
25master-password=<password>
26master-port=<masterport>
27server-id=<slaveid,例如2>
28
293、停止服务
30
31mysqladmin -S <mastersock> -u root -p shutdown
32mysqladmin -S <slavesock> -u root -p shutdown
33
344、拷贝数据
35
365、启动Master服务
37
38<mastermysql>/safe_mysqld --defaults-file=<master配置文件> <其他选项> &
39Master数据库<datadir>目录应该生成 <masterhost>-bin.<当前序号> 文件
40
416、启动Slave服务
42
43<datadir>/master.info配置文件:
44<masterhost>-bin.<当前序号,例如1>
45<开始位置,初始必须为73>
46<masterhost>
47<user>
48<password>
49<masterport>
50<出错重试间隔(s),例如60>
51
52<slavemysql>/safe_mysqld --defaults-file=<slave配置文件> <其他选项> &
53
547、测试/监视
55
56Master数据库中执行
57SHOW MASTER STATUS;
58应显示
59+---------------------------+-----------+--------------+------------------+
60| File | Position | Binlog_do_db | Binlog_ignore_db |
61+---------------------------+-----------+--------------+------------------+
62|<masterhost>-bin.<当前序号>| <currpos> |<databasename>| |
63+---------------------------+-----------+--------------+------------------+
64
65Slave数据库中执行
66SHOW SLAVE STATUS;
67应显示
68+---------------+-------------+-------------+---------------+---------------------------+-----------+---------------+-----------------+---------------------+------------+------------+--------------+
69| Master_Host | Master_User | Master_Port | Connect_retry | Log_File | Pos | Slave_Running | Replicate_do_db | Replicate_ignore_db | Last_errno | Last_error | Skip_counter |
70+---------------+-------------+-------------+---------------+---------------------------+-----------+---------------+-----------------+---------------------+------------+------------+--------------+
71| <masterhost> | <slaveuser> | <masterport>| XX |<masterhost>-bin.<当前序号>| <currpos> | Yes | | | 0 | | 0 |
72+---------------+-------------+-------------+---------------+---------------------------+-----------+---------------+-----------------+---------------------+------------+------------+--------------+
73
748、数据同步停止故障的处理
75
76数据同步停止最常见的原因是人为改动了Slave端数据造成从Master取回的SQL语句执行错误,
77例如Unique Key冲突。所以首先应该严格限制手工更改Slave数据。
78
79如果发现了同步停止可以有以下几步处理方式:
801)记录停止的位置(Pos);
812)观察停止位置的SQL语句,如果这一SQL语句必须执行,跳到(5);
823)如果SQL语句可以跳过(或正在执行已经执行过的SQL),可以用SET SQL_SLAVE_SKIP_COUNTER=n跳过,
83(一般SQL语句n=1, 带有auto-increment的语句n=2)完成后执行slave start;
84如果同步继续但出现了新错误,重复(3),如果没解决问题,可以重新设SQL_SLAVE_SKIP_COUNTER再试,
85如果还不成功说明断点记录有错,选择(4)或者(5);
864)如果Master上的log不过大(几百M以内),复制一份后用mysqlbinlog转成可阅读的格式,
87寻找断点附近SQL语句(文件里每句话前都有“at xxxxx",找一个断点重新开始),
88更改Slave端的master.info里第2行为新断点,重启Slave库;
89如果不成功则选择(5);
905)最终解决方案
91停止Master/Slave数据库运行;
92拷贝静态数据文件到Slave库;
93启动Master库;
94更改Slave库文件master.info中log-bin文件名及断点(73);
95启动Slave库。
96
97
989、附加命令
99
100清空无用log-bin: PURGE MASTER LOGS TO '<masterhost>-bin.<当前序号>';</masterhost></currpos></masterhost></masterport></slaveuser></masterhost></databasename></currpos></masterhost></slave配置文件></slavemysql></masterport></password></user></masterhost></masterhost></datadir></masterhost></datadir></master配置文件></mastermysql></slavesock></mastersock></slaveid,例如2></masterport></password></user></masterhost></masterid,例如1></tablename></databasename></tablename></databasename></masterid,例如1></databasename></password></user></slavehost></password></slavehost></user></tablename></databasename>