此文章使用测试环境的参数配置
一、准备环境
操作系统:Centos7.4
Mysql版本:5.7
主:10.1.11.22
从:10.1.11.23
操作步骤:
搭建MySQL服务这里就不描述搭建过程
启动MySQL登录设置root密码
mysql -uroot -p$(awk '/temporary password/{print $NF}' /var/log/mysqld.log)
mysql> alter user root@localhost identified by 'Password';
二、配置my.cnf 文件 只需修改server_id
server-id做什么用的?
1、 mysql的同步的数据中是包含server-id的,用于标识该语句最初是从哪个server写入的,所以server-id一定要有的
2、 每一个同步中的slave在master上都对应一个master线程,该线程就是通过slave的server-id来标识的;每个slave在master端最多有一个master线程,如果两个slave的server-id 相同,则后一个连接成功时,前一个将被踢掉。 这里至少有这么一种考虑:
slave主动连接master之后,如果slave上面执行了slave stop;则连接断开,但是master上对应的线程并没有退出;当slave start之后,master不能再创建一个线程而保留原来的线程,那样同步就可能有问题;
3、 在mysql做主主同步时,多个主需要构成一个环状,但是同步的时候有要保证一条数据不会陷入死循环,这里就是靠server-id来实现的
vi /etc/my.cnf
[mysqld]
basedir=/data/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=22
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db01 [\\d]>
#autocommit=0指事务非自动提交,自此句执行以后,每个SQL语句或者语句块所在的事务都需要显示"commit"才能提交事务
#binlog_format binlog日志格式,mysql默认采用statement,建议使用mixed
三、查看所有节点server_id
[root@Test01 ~]# mysql -uroot -p -e "select @@server_id"
Enter password:
+-------------+
| @@server_id |
+-------------+
| 22 |
+-------------+
[root@Test02 ~]# mysql -uroot -p -e "select @@server_id"
Enter password:
+-------------+
| @@server_id |
+-------------+
| 23 |
+-------------+
四、主服务器创建复制用户
mysql> grant replication slave on *.* to repl@'10.1.11.%' identified by 'Test@101#Qm';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| repl | 10.1.11.% |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
4 rows in set (0.07 sec)
五、10.1.11.22(主)备份数据库
[root@Test01 ~]#mysqldump -uroot -p -A --master-data=2 --single-transaction -R --triggers > /mnt/all.sql
六、记录 binlog日志及position号
mysql> show master status;
+-------------------------+-----------+
|File |Position |
+-------------------------+-----------+
|mysql-bin.0000003 | 484 |
+-------------------------+-----------+
七、将主库备份的数据导入从库
[root@Test01 ~]#mysql -uroot -p
mysql>source /mnt/all.sql
八、从库执行同步信息
mysql> CHANGE MASTER TO
-> MASTER_HOST='10.1.11.22',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='Test@101#Qm',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.000003',
-> MASTER_LOG_POS=484,
-> MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
九、开启主从线程
从库执行
mysql> start slave;
查看从库复制状态
mysql> show slave status \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
主从复制配置完成