您的位置:首页 > 数据库 > MySQL

mysql复制注意事项

2012-07-07 00:10 176 查看
个人笔记总结,有待改动……

一、产成二进制日志的库 查看命令: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;

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;

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

server-id=2

master-host=db-master.mycompany.com

master-port=3306

master-user=pertinax

master-password=freitag

master-connect-retry=60

report-host=db-slave.mycompany.com

logs-slave-updates

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

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

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;或退出会话重新登陆后锁失效。
本文出自 “notepad” 博客,请务必保留此出处http://sndapk.blog.51cto.com/5385144/922701
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: