首先在vmware上创建3个cenos7虚拟机,ip分别是:192.168.0.112,192.168.0.113,192.168.0.114,
搭建架构图如下:
1.在3个虚拟机上安装mysql;
2.master机器(192.168.0.112)创建复制用户设置其权限:
mysql> create user 'repl'@'%' identified by 'Repl_123456';
mysql> grant replication slave on *.* to 'repl'@'%';
mysql> flush privileges;
3.配置主从数据库my.cnf
master my.cnf配置内容如下:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 主从复制所需
server_id=1
gtid_mode=ON
enforce-gtid-consistency=ON
#binlog
log_bin=master-binlog
log-slave-updates=1
binlog_format=row
#relay log
skip_slave_start=1
max_connect_errors=1000
default_authentication_plugin = 'mysql_native_password'
slave my.cnf配置文件如下:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 主从复制所需
server_id=2
gtid_mode=ON
enforce-gtid-consistency=ON
# 启动每个副本 ,以确保在配置副本设置之前不会启动复制
skip-slave-start=on
# 指定复制的数据库
replicate-do-db=demo
#binlog
log-bin=slave-binlog
log-slave-updates=1
binlog_format=row #强烈建议,其他格式可能造成数据不一致
#relay log
skip_slave_start=1
default_authentication_plugin = 'mysql_native_password'
配置完成从起主从mysql:
service mysqld restart
重启后,在slave上尝试链接复制用户是否可以连接成功:
mysql -urepl -pRepl_123456 -h192.168.0.112 -P 3306
如果链接不成功,查看master防火墙是否开发3306端口号,如果未开放开放后再试
4.主从设置:
先在master机器上mysql中执行以下命令查看master状态:
mysql> show master status\G
如图,master的gtid xxxxx:1-n则设置正确
在slave的mysql中执行下面命令,设置主从关系:
mysql> CHANGE MASTER TO
MASTER_HOST = '192.168.0.112',
MASTER_PORT = 3306,
MASTER_USER = 'repl',
MASTER_PASSWORD = 'Repl_123456',
MASTER_AUTO_POSITION = 1;
在slave的mysql中启动slave:
mysql> start slave;
在slave的mysql中查看slave状态:
mysql> show slave status\G
如下图,出现两个yes则主从同步设置成功:
5.注意事项
a.设置过程如果出错,可以重新设置
在master的mysql中执行:reset master然后删除配置data下的binlog文件;
在slave的mysql中执行:
mysql> stop slave;
mysql> reset slave;
mysql> start slave;
b.在搭建过程master和slave机器上都应没有需要同步的库,直到搭建成功,才可以在master中创建数据库、创建表、插入数据等操作才会同步到slave库;
如果master已经存在库了,即是在原库基础上做slave横向扩展,需要先把master数据库备份,然后在新slave上导入,在配置从库同步。
c.每次停止从服务器,再次启动后,需要在slave上mysql中执行start slave,否则不会同步数据。