主服务器: 192.168.56.11
从服务器: 192.168.56.102
MYSQL版本:5.5.28-log
配置步骤:
1、配置主服务器:
vi /etc/my.cnf
在mysqld下添加以上两行。
[mysqld]
server-id = 1
log-bin=mysql-bin
binlog-do-db=database1 //需要同步的数据库
binlog-do-db=database2
binlog-ignore-db=mysql //被忽略的数据库
2、主服务器创建授权用户
grant replication slave on *.* to 'slave'@'192.168.56.%' identified by '123456';
FLUSH PRIVILEGES;
3、重启 MYSQL主服务器
4、reset maste
获取日志的名称及偏移位置
5、配置从服务器:
vi /etc/my.cnf
server-id=2
replicate-do-db=database1 //同步的数据库
replicate-do-db=database2
replicate-ignore-db=mysql //被忽略的数据库
6、如获取的主服务器日志名称=mysql-bin.000004
便宜位置=107
change master to master_host='192.168.56.11',master_user='slave',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=107;
7、
重启MYSQL从服务器
8、启动slave
start slave;
配置完毕
经验教训:
1、主要是5.5之后不再支持master打头的参数
如:master-host,master-user,master-password,master-port等。
错误如下:
[ERROR] /usr/local/mysql/bin/mysqld: unknown variable 'master-host=192.168.2.182'
2、 使用replicate-wild-ignore-table选项而不要使用replicate-do-db或者replicate-ignore-db。
使用replicate_do_db和replicate_ignore_db时有一个隐患,跨库更新时会出错。
如设置 replicate_do_db=test
use mysql;
update test.table1 set ......
第二句将不会被执行
如设置 replicate_ignore_db=mysql
use mysql;
update test.table1 set ......
第二句会被忽略执行
原因是设置replicate_do_db或replicate_ignore_db后,MySQL执行sql前检查的是当前默认数据库,所以跨库更新语句被忽略。
可以使用 replicate_wild_do_table 和 replicate_wild_ignore_table 来解决跨库更新的问题,如:
replicate_wild_do_table=test.%
或
replicate_wild_ignore_table=mysql.%
这样就可以避免出现上述问题了