mysql复制注意事项

个人笔记总结,有待改动……


一、产成二进制日志的库 查看命令:show master status;
binlog-do-db=
binlog-ignore-db=
例:假设服务器上有mysql、a、b、c四个库,测试以下配置:

1、修改my.cnf文件,目的:只记录a和b两个库的日志
binlog-do-db=a,b
结果:所有库都不会记录日志(因为不存在"a,b"这个库,被看做一个库了,所以如果想指定多个库,应该分别指定)

2、修改my.cnf文件,目的:只记录a和b两个库的日志
binlog-do-db=a
binlog-do-db=b
结果:只记录a和b的日志
等同于:
binlog-ignore-db=mysql
binlog-ignore-db=c

3、修改my.cnf文件,目的:测试a库同时存在于do与ignore中会不会记录日志
binlog-do-db=a
binlog-do-db=b
binlog-ignore-db=a
结果:同样记录a和b的日志。如果两个语句同时做了配置,存在数据库冲突,则do的优先级大于ignore(仅测试用,生产中不会故意出现这种情况)

4、修改my.cnf文件,目的:测试如果一个库如:c 不存在于do和ignore配置参数中,会不会记录日志
binlog-do-db=a
binlog-do-db=b
binlog-ignore-db=mysql
结果:不会记录c的日志

总结:
只使用do或ignore就可以控制需要记录日志的数据库。如果两个参数都做了配置,则以binlog-do-db配置生效。


二、从服务器选择要复制的库,查看命令:show slave status\G
replicate-do-db=
replicate-ignore-db=

测试结果:
只使用do或ignore就可以控制需要复制的数据库。如果两个参数都做了配置,则以replicate-do-db=配置生效。




三、my.cnf与change master to (推荐)
mysql版本为5.5.19中
以下 参数只能在my.cnf中指定,使用change master to 会报错
slave-skip-errors=all或slave-skip-errors=1501,1502
log-slave-updates (mysql.cn中--logs-slave-updates应该是change中指定,配置文件中未具体指明参数)
report-host=156 或 report-host=example.example.com

binlog-do-db=dbname --只用do即可
binlog-ignore-db=dbname


replicate-do-db=dbname --只用do即可
replicate-ignore-db=dbname
skip-slave-start    ---(告诉从服务器当服务器启动时不启动从服务器线程。使用START SLAVE语句以后手动启动线程)



change语句(注意引号的使用):
change master to master_host='192.168.2.155',master_user='sync156',master_password='123',master_log_file='mysql-bin.000017',master_log_pos=107,master_port=3306,master_connect_retry=9;

 
 
  1. change master to\

  2. master_host='192.168.2.155',\

  3. master_user='sync156',\

  4. master_password='123',\

  5. master_log_file='mysql-bin.000017',\

  6. master_log_pos=107,\

  7. master_port=3306,\

  8. master_connect_retry=9;



change语句也可以直接配置在my.cnf文件中(有时会问题,不建议使用):

 
 
  1. [mysqld]

  2. server-id=2

  3. master-host=db-master.mycompany.com

  4. master-port=3306

  5. master-user=pertinax

  6. master-password=freitag

  7. master-connect-retry=60

  8. report-host=db-slave.mycompany.com

  9. logs-slave-updates




slave-skip-errors=all不加此参数,遇到错误会导致复制中止,show slave stauts\G查看是否有错误如error:1052,解决:

 
 
  1. stop slave

  2. SETGLOBAL SQL_SLAVE_SKIP_COUNTER = 1   --跳过接下来1个错误

  3. start slave




重启mysql后,不论binlog记录所有库,还是某个库,binlog文件都跳到下一个,pos为107


reset master;  
---清除binlog日志,执行后show master status;看到log_file=000001 pos=107


reset slave;  
--- 删除master.info,建议执行过此命令后重启mysql服务并退出mysql登陆界面,重新登陆。如果不重启,再指定master参数时,没有指 定的按照reset slave之前的参数生效、加载到master.info文件中(包含show slave status\G看到的信 息,mysql每次启动如果此文件存在则读取此文件主服务器信息,不会加载my.cnf中的配置参数)


server-id即使不是链式复制,a-b和a-c两个主从复制时,server-id也不能相同


flush tables with read lock;此命令为所有数据库上锁为只读状态,unlock tables;或退出会话重新登陆后锁失效。

你可能感兴趣的:(mysql复制)