原创 MYSQL主从复制配置

主服务器: 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.%

 

这样就可以避免出现上述问题了

 

你可能感兴趣的:(mysql)