mysql主从同步配置
环境
Centos 7
window 10
Mysql 7.5
参考
配置
master配置
在主服务器的my.cnf配置文件中,增加如下配置信息然后重启mysql
[mysqld]
log-bin=mysql-bin
server-id=1
说明: 修改配置后重启mysql
1. log-bin:开启二进制日志,该日志是在事务提交时写日志文件的。默认大小是1G,后面加001,002这样的后缀顺加。
2. server-id,唯一标识主机,mysql主从每个mysql实例配置都不一样就行。这个值默认是0,如果是0,主服务器拒绝任何从服务器的连接。
slave配置
在从服务器的my.cnf配置文件中,增加如下配置信息然后重启mysql
[mysqld]
server-id=2
skip-slave-start=false
read_only=1
relay-log=relay-bin
relay-log-index=relay-bin.index
说明: 修改配置后重启mysql
server-id唯一就行。如果默认为0,则拒绝连接主服务器。
master创建复制用户
在master上,root登录mysql,执行
CREATE USER 'lxj'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'lxj'@'%';
flush privileges;
说明:
简单的创建用户,授予REPLICATION SLAVE权限。访问限制,密码,用户名等,根据实际情况自行设定,后面注意保持一致。
获取master日志坐标
连接mysql,执行
SHOW MASTER STATUS;
会有类似输出
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
记住坐标 mysql-bin.000001 154
说明
1.会话输出,有可能为空,一般修改配置文件后重启mysql就会有了。
创建master数据快照
mysqldump --all-databases --master-data -uroot -p > /tmp/dbdump.db
说明:
1.–master-data此选项会在备份中添加 CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000004’, MASTER_LOG_POS=154;
创建salve复制
1.上传master的快照备份dbdump.db到slave的/tmp下
2.设置master信息,在从mysql中输入
CHANGE MASTER TO
MASTER_HOST='192.168.234.130',
MASTER_USER='lxj',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
3.倒入数据到slave
bin/mysql -uroot -p < /tmp/dbdump.db
4.手工启动slave复制线程
start slave
show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.31.84
Master_User: repl
Master_Port: 13306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 154
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
配置完成,顺便看看进程
mysql> show processlist;
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| 2 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 5 | system user | | NULL | Connect | 89 | Waiting for master to send event | NULL |
| 6 | system user | | NULL | Connect | 89 | Slave has read all relay log; waiting for more updates | NULL |
多了两个复制的进程
说明
start slave 若提示Failed to initialize the master info structure
1,尝试先
reset slave;
2,再重新导入主库备份文件
mysqldump --all-databases --master-data -uroot -h 192.168.234.130 -p > /tmp/dbdump.db
mysql -uroot -h192.168.234.130 -P3307 -p < /tmp/dbdump.db
3,最后启动复制
start slave;
mysql 从库添加read_only=1 仍可修改,一般情况下我们不希望从库写数据,但read_only只对普通用户起作用,root仍可修改数据,我们只要为从库新建一个普通用户即可。