服务器 频道

MySQL数据同步配置

  【IT168 服务器学院】要求MySQL版本>=3.23.54
  <...>指代变量

  1、Master端配置:

   Slave同步账号权限:
   GRANT FILE ON <DatabaseName>.<TableName> TO <User>@<SlaveHost> IDENTIFIED BY ''<Password>'';
   或者
   INSERT INTO user VALUES(''<SlaveHost>'',''<User>'',password(''<Password>''),''N'',''N'',''N'',''N'',''N'',''N'',''N'',''N'',''N'',''Y'',''N'',''N'',''N'',''N'');
   FLUSH PRIVILEGES;
   
   Master启动配置文件:
   [mysqld]
   log-bin
   binlog-do-db=<DatabaseName>
   server-id=<MasterId,例如1>
   
   或者:
   [mysqld]
   log-bin
   replicate-wild-do-table=<DatabaseName>.<TableName>
   replicate-wild-ignore-table=<DatabaseName>.<TableName>
   server-id=<MasterId,例如1>
   
  2、Slave端配置
   
   Slave启动配置文件:
   [mysqld]
   master-host=<MasterHost>
   master-user=<User>
   master-password=<Password>
   master-port=<MasterPort>
   server-id=<SlaveId,例如2>

  3、停止服务

   mysqladmin -S <MasterSock> -u root -p shutdown
   mysqladmin -S <SlaveSock> -u root -p shutdown

  4、拷贝数据

  5、启动Master服务

   <MasterMysql>/safe_mysqld --defaults-file=<Master配置文件> <其他选项> &
   Master数据库<DATADIR>目录应该生成 <MasterHost>-bin.<当前序号> 文件

  6、启动Slave服务

   <DATADIR>/master.info配置文件:
   <MasterHost>-bin.<当前序号,例如1>
   <开始位置,初始必须为73>
   <MasterHost>
   <User>
   <Password>
   <MasterPort>
   <出错重试间隔(s),例如60>

   <SlaveMysql>/safe_mysqld --defaults-file=<Slave配置文件> <其他选项> &

  7、测试/监视

   Master数据库中执行
   SHOW MASTER STATUS;
   应显示
   +---------------------------+-----------+--------------+------------------+
   | File                      | Position  | Binlog_do_db | Binlog_ignore_db |
   +---------------------------+-----------+--------------+------------------+
   |<MasterHost>-bin.<当前序号>| <CurrPos> |<DatabaseName>|                  |
   +---------------------------+-----------+--------------+------------------+
   
   Slave数据库中执行
   SHOW SLAVE STATUS;
   应显示
   +---------------+-------------+-------------+---------------+---------------------------+-----------+---------------+-----------------+---------------------+------------+------------+--------------+
   | 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 |
   +---------------+-------------+-------------+---------------+---------------------------+-----------+---------------+-----------------+---------------------+------------+------------+--------------+
   | <MasterHost>  | <SlaveUser> | <MasterPort>| XX            |<MasterHost>-bin.<当前序号>| <CurrPos> | Yes           |                 |                     | 0          |            | 0            |
   +---------------+-------------+-------------+---------------+---------------------------+-----------+---------------+-----------------+---------------------+------------+------------+--------------+
   
  8、数据同步停止故障的处理

   数据同步停止最常见的原因是人为改动了Slave端数据造成从Master取回的SQL语句执行错误,
   例如Unique Key冲突。所以首先应该严格限制手工更改Slave数据。
   
   如果发现了同步停止可以有以下几步处理方式:
   1)记录停止的位置(Pos);
   2)观察停止位置的SQL语句,如果这一SQL语句必须执行,跳到(5);
   3)如果SQL语句可以跳过(或正在执行已经执行过的SQL),可以用SET SQL_SLAVE_SKIP_COUNTER=n跳过,
     (一般SQL语句n=1, 带有auto-increment的语句n=2)完成后执行slave start;
     如果同步继续但出现了新错误,重复(3),如果没解决问题,可以重新设SQL_SLAVE_SKIP_COUNTER再试,
     如果还不成功说明断点记录有错,选择(4)或者(5);
   4)如果Master上的log不过大(几百M以内),复制一份后用mysqlbinlog转成可阅读的格式,
     寻找断点附近SQL语句(文件里每句话前都有“at xxxxx",找一个断点重新开始),
     更改Slave端的master.info里第2行为新断点,重启Slave库;
     如果不成功则选择(5);
   5)最终解决方案
    停止Master/Slave数据库运行;
    拷贝静态数据文件到Slave库;
    启动Master库;
    更改Slave库文件master.info中log-bin文件名及断点(73);
    启动Slave库。
   
   
  9、附加命令

   清空无用log-bin: PURGE MASTER LOGS TO ''<MasterHost>-bin.<当前序号>'';
  

0
相关文章