第一步配置Replication
①编辑主服务器的配置文件 my.cnf
[mysqld]
log-bin=/var/log/mysql/mysql-bin //(开启二进制文件 这个目录需要自己创建,并设置mysql权限)
server-id=1 //(指定唯一ID 一般情况下主服务器设置为1)
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
②创建日志目录并赋予权限 并重启服务
[root@mysql-master1 ~]# mkdir /var/log/mysql
[root@mysql-master1 ~]# chown mysql.mysql /var/log/mysql
[root@mysql-master1 ~]# systemctl restart mysqld
③在主服务器里创建一个专门用于复制数据的用户,目的是最大程度地降低对其他帐户的危害
mysql> create user 'wang'@'%' identified by '123';
mysql> grant replication slave on *.* to 'wang'@'%';
④在主服务器里解析主机名(也可以直接指定IP地址在从服务器登录,但是生产环境建议指定主机名)
⑤关闭主服务器的防火墙和selinux
[root@mysql-master1 ~]# setenforce 0
[root@mysql-master1 ~]# systemctl stop firewalld
⑥在从服务器使用刚才创建的用户测试连接
[root@mysql-server1 ~]# mysql -uwang -p123 -hmysql-master1
第二步 有两种情况:主服务器有数据,主服务器没有数据。
主服务器没有数据操作步骤:
①配置从服务器的配置文件 /etc/my.cnf 并重启
[mysqld]
server-id=3
[root@mysql-server1 ~]#systemctl restart mysqld
②在从服务里连接主服务器mysql
[root@mysql-server1 ~]# mysql -uwang -p123 -hmysql-master1
③通过以下语句来刷新所有表和阻止写语句
mysql> flush tables with read lock;
mysql> show master status \G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 319
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.01 sec)
④接下来在从服务器里执行下列语句
mysql> CHANGE MASTER TO
MASTER_HOST='mysql-master1',
MASTER_USER='wang',
MASTER_PASSWORD='123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=319;
mysql> start slave; //开启IO和SQL线程
⑤在从服务器的mysql查看是否开启 如果出现IO 是no 那么就是UUID重复或者权限问题,如果是SQL mo 设置的文件名不对。
mysql> show slave status\G
主服务器有数据的步骤:
①先把主服务器数据备份出来,在主服务器上操作,在线上环境需要把密码隐藏起来,更安全。
[root@mysql-master1 ~]# mysqldump -uroot -p123 --all-databases --master-data=1 > dbdump.db
②用scp拷贝到从服务器
[root@mysql-master1 ~]# scp dbdump.db 10.0.107.133: /root/
③在从服务器恢复拷贝过来的备份,进入从mysql
[root@mysql-server1 ~]# vim dbdump.db 找到CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=1264; //需要记住file和pos
mysql> source /root/dbdump.db;
//以上目的是为了让主从服务器数据相同(我会再单写一篇如何备份和恢复。)
④在从Mysql 终端执行连接信息
mysql> CHANGE MASTER TO
MASTER_HOST='10.0.107.102',
MASTER_USER='wang',
MASTER_PASSWORD='123',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=1264;
⑤启动从服务器的复制线程以开始复制
mysql> start slave;
⑥检查是否成功
mysql> show slave status\G
生活不易,路过各位大佬点个赞