MySQL数据同步配置


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配置文件> &lt;其他选项&gt; &amp;   
 39Master数据库<datadir>目录应该生成 <masterhost>-bin.&lt;当前序号&gt; 文件 
 40
 416、启动Slave服务 
 42
 43<datadir>/master.info配置文件:   
 44<masterhost>-bin.&lt;当前序号,例如1&gt;   
 45&lt;开始位置,初始必须为73&gt;   
 46<masterhost>
 47<user>
 48<password>
 49<masterport>   
 50&lt;出错重试间隔(s),例如60&gt;
 51
 52<slavemysql>/safe_mysqld --defaults-file=<slave配置文件> &lt;其他选项&gt; &amp;
 53
 547、测试/监视 
 55
 56Master数据库中执行   
 57SHOW MASTER STATUS;   
 58应显示   
 59+---------------------------+-----------+--------------+------------------+   
 60| File | Position | Binlog_do_db | Binlog_ignore_db |   
 61+---------------------------+-----------+--------------+------------------+   
 62|<masterhost>-bin.&lt;当前序号&gt;| <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.&lt;当前序号&gt;| <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.&lt;当前序号&gt;';</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>
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus