首先介绍一下环境:
虚拟机网络配置:这里配置的是虚拟机里面的桥接网络模式。之前使用nat模式,Slave_IO_Running: No,数据库不能同步,痛苦很久,所以这里一定要注意啊
确保两个mysql主机数据库,数据一致。很重要。可以使用mysqldump备份数据到另外一台主机
主机名 操作系统 IP
DB1(maser) centos6.5192.168.15.103
DB2(slave) centos6.5192.168.15.104
1,修改MySql配置文件
默认情况下,mysql的配置文件在/etc/my.cnf,首先修改DB1的配置文件,
其中黑体加粗的部分为添加的内容
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
max_allowed_packet=100M
server-id=1
log-bin=mysql-bin
relay-log=mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
然后修改DB2的主机配置文件,
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
max_allowed_packet=100M
server-id=2
log-bin=mysql-bin
relay-log=mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
二,创建复制用户并授权
1.首先在DB1的mysql数据库创建复制用户
grant replication slave on *.* to 'repl'@'192.168.15.104' identified by '123456';
show master status;
然后在DB2的mysql库中江DB1设置为自己的主服务器,在DB2的mysql数据库操作如下:
stop slave;
change master to master_host='192.168.15.103', master_user='repl', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=261;
start slave;
这里需要注意的是:master_log_file=mysql-bin.000001,master_log_pos=261 这里的两个数值刚好是show master status;查询的结果。
下面查看DB2上面的运行结果:
这里需要注意的是:下面的这两个只必须都为yes,表明复制进程正常运行,
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
至此mysql的主从复制已经配置完成。接下来配置DB2到DB1的主从复制。
首先在DB2上面创建主从复制,在DB2的mysql数据库操作如下:
grant replication slave on *.* to 'repl'@'192.168.15.103' identified by '123456';
show master status;
在DB1的数据库中将DB2设置为自己的主服务器,在DB1数据库上面操作如下
slave stop;
change master to master_host='192.168.15.104', master_user='repl', master_password='123456', ma', master_log_pos=261;
slave start;
下面查看DB1的salve的运行状态:如果Slave_IO_Running: Yes Slave_SQL_Running: Yes都是yes,则表明DB1上面的复制服务运行正常。
show slave status;
至此mysql双主模式配置完成。
测试mysql的主主复制功能。
在DB1上面创建数据库
create database repldb;
use repldb
create table repl_table(id int, email varchar(80),password varchar(40) not null);
在DB2上面查看:
或者在DB2上面创建,在DB1上面查看。
常见报错:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'stop' at line 1
解决办法。slave stop;
重新执行:change master to master_host='192.168.15.103', master_user='repl', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=261;
开启slave功能
salve start;
2,查看状态报错:
show slave status\G;
Slave_IO_Running: No
Slave_SQL_Running: Yes
截止查看日志报错:[ERROR] Slave I/O: error connecting to master '[email protected]:3306' - retry-time: 60 retries: 86400, Error_code: 2013
解决办法:删除master.info重启数据库 rm -rf /var/lib/mysql/master.info 这个是保持数据库的用户和密码文件,
或者是虚拟机里面需要设置为桥接网络,重启虚拟机,(我的问题是虚拟机),
或者是删除所有的mysql-bin.*的所有文件,和 mysql-relay-bin.*文件,然后重新配置。
ERROR 2006 (HY000): MySQL server has gone away
原因是:部分表太大,修改my.cf文件,添加max_allowed_packet=100M
这查看状态max_allowed_packet=100M
show slave status\G;
主要查看是否全是是yes
Slave_IO_Running: No
Slave_SQL_Running: Yes