mysql互为主从

说明:
按前一篇日记方法装了两台机器测试
master1:192.168.5.11
master2:192.168.5.12
开启两台服务器的binlog功能(vim /etc/my.cnf,在mysqld字段下加入下面内容)
master1:
user = mysql
log-bin=mysql-bin
server-id = 1
binlog-do-db=test
binlog-ignore-db=mysql
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
skip-name-resolve

master2:
user = mysql
log-bin=mysql-bin
server-id = 2
binlog-do-db=test(要同步的数据库)
binlog-ignore-db=mysql
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
skip-name-resolve
保存然后重启mysql

################################说明#########################
server_id值必须为2到232–1之间的一个正整数值。ID值唯一的标识了复制群集中的主从服务器,因此它们必须各不相同。
binlog-do-db=database 是要记录日志的数据库;
同步多个数据库重复设置选项 binlog-do-db=test   和 replicate-do-db=test
例如
binlog-do-db=test1
replicate-do-db=test1
binlog-do-db=test2
replicate-do-db=test2
binlog-ignore-db 是不要记录日志的数据库名,多个数据库中间用逗号(,)隔开;
mysql配置文件my.cnf中    log-slave-updates表示 如果一个MASTER 挂掉的话,另外一个马上接管。
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1   指的是服务器频繁的刷新日志。这个保证了在其中一台挂掉的话,日志刷新到另外一台。从而保证了数据的同

步 。
auto_increment_offset = 1
auto_increment_increment = 2
这样A的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID了
auto_increment_offset = 2
auto_increment_increment = 2
这样B的auto_increment字段产生的数值是:2, 4, 6, 8, …等偶数ID了
你的auto_increment字段在不同的服务器之间绝对不会重复,所以Master-Master结构就没有任何问题了。当然,你还可以使用3 台,4台,

或者N台服务器,只要保证auto_increment_increment = N 再设置一下auto_increment_offset为适当的初始值就可以了,那样,我们的

MySQL可以同时有几十台主服务器,而不会出现自增长ID 重复。

#############################################################


二、将192.168.5.11设置为192.168.5.12的主服务器
登录数据库,在192.168.5.11上新建授权用户:
MySQL> grant replication slave on *.* to 'replication'@'%' identified by 'replication';
MySQL>flush privileges;
MySQL> show master status;(得出一下结果)
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| MySQL-bin.000003 |      374 |              |                  |
+------------------+----------+--------------+------------------+
mysql-bin.00003就是我们要开始同步的文件,374就是初始位置。
登录到192.168.5.12,把192.168.5.11设置成自己的主服务器
MySQL> change master to master_host='192.168.1.11',master_user='replication',master_password='replication',master_log_file='MySQL-bin.000003',master_log_pos=374;(注意Mysql-bin.000003的大小写)
MySQL> start slave;
MySQL> show slave status/G; 查看同步状态(Slave_IO_Running: Yes和Slave_SQL_Running: Yes一定要为YES)
如果做简单的一主一从的话,到这里就可以了,已经完成了;如果要两个服务器互为主从的话,要在192.168.5.12上做相同的设置


将192.168.5.12设置为192.168.5.11的主服务器
登录数据库,在192.168.5.11上新建授权用户:
MySQL> grant replication slave on *.* to 'replication'@'%' identified by 'replication';
MySQL>flush privileges;
MySQL> show master status;(得出一下结果)
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| MySQL-bin.000009 |      312 |              |                  |
+------------------+----------+--------------+------------------+
mysql-bin.00009就是我们要开始同步的文件,312就是初始位置。
登录到192.168.5.11,把192.168.5.12设置成自己的主服务器
MySQL> change master to master_host='192.168.1.12',master_user='replication',master_password='replication',master_log_file='MySQL-bin.000003',master_log_pos=312;(注意Mysql-bin.000009的大小写)
MySQL> start slave;
MySQL> show slave status/G; 查看同步状态(Slave_IO_Running: Yes和Slave_SQL_Running: Yes一定要为YES)

如果主数据库有数据的话

数据库锁表操作,不让数据再进行写入动作。mysql> FLUSH TABLES WITH READ LOCK ;


至此,mysql双机互为主从设置完毕

猜你喜欢

转载自sooxin.iteye.com/blog/2029550