Mysql数据库同步Replication(四):主主同步

五、主主同步复制设置

服务器A:192.168.1.100

服务器B:192.168.1.60

同步数据库名: test

  1. 1.  创建同步账户;

服务器A:

grant replication slave on *.* to 'replication'@'192.168.1.60' identified by '111111';
flush privileges;

服务器B:

grant replication slave on *.* to 'replication'@'192.168.1.100' identified by '111111';
flush privileges;
  1. 2.  设置服务器配置;

服务器A:

server-id       = 1
log-bin         = mysql-binlog
binlog-do-db   = test
binlog-ignore-db= mysql,information_schema
max_binlog_size = 500M
binlog_format   = mixed
        #主主需加入的部分
log-slave-updates
auto_increment_offset = 1
auto_increment_increment = 2
sync_binlog = 2
relay-log=smmsrv-relay-bin
replicate-do-db = test
replicate-ignore-db = mysql,information_schema

服务器B:

server-id       = 2
log-bin=mysql-bin.log
replicate-do-db=test
replicate-ignore-db=mysql,information_schema
       #主主需加入的部分
binlog-ignore-db=mysql
binlog-do-db=test
binlog_format=mixed
expire_logs_day=3
max_binlog_size=500M
auto_increment_offset = 2
auto_increment_increment = 2
log-slave-updates
sync_binlog = 2
relay-log=localhost-relay-bin

配置完成后,重新启动A,B两台数据库服务器上的mysql

service mysqld restart
  1. 3.  为了设置同步,首先测试一下创建的账户是否可以登录到设定的服务器上

服务器A:

shell>mysql –ureplication –h ‘192.168.1.60’ –p

服务器B:

shell>mysql –ureplication –h ‘192.168.1.100’ –p

登录排错:

如果登录不上,先看看用户名,密码,主机IP或主机名是否有问题,要是再不对,看看报错,一般的错误可能是需要设置防火墙允许3306端口

vi /etc/sysconfig/iptables

添加-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT,然后重启iptables

(注意添加在-A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited之前,否则可能导致规则不生效)

Mysql无法远程连接的常见问题:

1)查看Mysql的端口是否正确,通过netstat -ntlp查看端口占用情况,一般情况下端口是3306。

2)报错:ERROR 2003 (HY000): Can’t connect to MySQL server on ’192.168.51.112′ (111)
查看/etc/my.cnf中,skip-networking 是否已被注掉,需要注掉。

3)报错:ERROR 2003 (HY000): Can’t connect to MySQL server on ’192.168.51.112′ (113)
查看是否iptables没有允许mysql连接,通过:service iptables stop临时关闭测试是否可以正常远程访问,如果可以,按上面方面设置iptable允许3306端口
4)远程访问mysql速度很慢的解决方法
修改/etc/my.cnf或my.ini
[mysqld]下添加
skip-name-resolve
skip-grant-tables

  1. 4.  首先设置主从同步;

服务器A:(前提是服务器A上已经有数据,服务器B上没有数据)

mysql>flush tables with read lock;
mysql>show master statusG
*************************** 1. row *************************** File: binlog.000006
Position: 107
Binlog_Do_DB: test Binlog_Ignore_DB: mysql,information_schema
1 row in set (0.00 sec)

mysqldump备份服务器A上的数据,数据库test,然后拷贝到服务器A上,一旦拷贝好,记得解锁服务器A上的锁定,如下:

mysql>unlock tables;

服务器B:

拷贝好服务器A上的数据之后,登录mysql,首先创建数据库,此时需要和服务器A上的数据库完全一致,可以使用show create database smm_vbb来显示创建的语句,用source命令导入数据

登录mysql;

mysql> stop slave;
mysql>change master to master_host='192.168.1.60', master_user='replication', master_password=‘111111', master_log_file='binlog.000006', master_log_pos=107;
mysql>start slave;
mysql>show slave status;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
  1. 5.        主主同步;

服务器A:

锁定服务器A,不要在写入数据;

等段时间,登录服务器B。

服务器B:

mysql>flush tables with read lock;
mysql>show master statusG
*************************** 1. row *************************** File: binlog.000005
Position: 256
Binlog_Do_DB: test Binlog_Ignore_DB: mysql,information_schema
1 row in set (0.00 sec)

服务器A:

mysql>unlock tables;
mysql> stop slave;
mysql>change master to master_host='192.168.1.100', master_user='replication', master_password=‘111111', master_log_file='binlog.000005', master_log_pos=256;mysql>start slave;
mysql>show slave status;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

此时不要忘了,解锁服务器B上的锁定:

服务器B:

mysql>unlock tables;

好的,成功了

参考文档:

http://dev.mysql.com/doc/refman/5.5/en/replication-howto.html

http://dev.mysql.com/doc/refman/5.1/zh/replication.html

http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#user-resources

http://www.mike.org.cn/articles/mysql-master-slave-sync-conf-detail/

http://www.hackbase.com/tech/2011-06-30/64326.html

http://hi.baidu.com/%D6%AA%C8%FD%CB%C4%C0%C9/blog/item/141854aa50a20fdf7cd92aa3.html

1条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注