Mysql 主从同步配置
Mysql本身支持同步方案,使得数据在备份,恢复,容灾和负载均衡方面都有一些自带的能力;
-
同步模式: mysql的同步支持主主同步,主从同步,原理大同小异,只是主主同步适应场景更广,但也会引发更多的安全问题(比如同时修改时,主键自增的问题),官网推荐的同步架构方式(示例):
-
执行方式: (数据变化记录在binlog中,使用binlog增量同步,每种方式的特点在这不展开聊)
- 基于语句同步,记录所有修改的语句(一些函数,触发器等不会生效)
- 基于行同步,记录所有变化
- 混合模式:语句+行
-
主从具体配置
先上配置图
假设
主机IP:1.2.3.4
从机IP:5.6.7.8Master修改访问地址限制,注释下面一句
bind-address = 127.0.0.1
-
Master增加上图配置:
- server-id: mysql的id,确保整个架构中唯一;
- log_bin:binlog记录的位置;
- binlog_do_db:记录哪个数据库到binlog(也就是以该主机为master时能往外部同步的数据范围);
- 其他配置自行查找,不是必须
- Slave配置:
- server-id:mysql的id,确保整个架构中唯一;
- relay-log:中继日志地址
- log_bin:binlog记录的位置;
- binlog_do_db:记录哪个数据库到binlog
- replicate_do_db:同步的数据库(拉取的数据库)
- replicate_ignore_db:忽略的数据库
- Master 配置好以后,重启:
sudo service mysql restart
- Master生成同步用户,生效
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES; -
Master 锁表,记录状态,导数据,释放锁(如果有镜像操作,可以替代该步骤,记录重启后的mysqlbin就可以了):
锁表:FLUSH TABLES WITH READ LOCK;
记录状态:SHOW MASTER STATUS;
返回状态类似:mysql> SHOW MASTER STATUS;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 | 12121 | test_mysql_replication | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)
记录下文件和位置(后面需要配置到从机)文件导出:
mysqldump -u root -p --opt test_mysql_replication > test_mysql_replication.sql
解锁:UNLOCK TABLES;QUIT;
Slave导入数据(至此,开始操作Slave机器):
建库:CREATE DATABASE test_mysql_replication;
导数据:mysql -u root -p test_mysql_replication < /path/to/test_mysql_replication.sql
- Slave重启:
sudo service mysql restart
- Slave开启同步(开始拉取数据):
配置:主机地址,同步用户,开始同步的log日志位置:CHANGE MASTER TO MASTER_HOST='1.2.3.4', MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=12121;
开启slave:START SLAVE;
- Slave检测:
正常情况下,slave已经开始正常运行了,可是用命令查看状态:SHOW SLAVE STATUS\G