准备工作
1.主从数据库版本最好一致
2.主从数据库内数据保持一致
主数据库:121.199.27.227 /ubuntu 16.04 MySQL 5.7.21 (阿里云)
从数据库:182.254.149.39 /ubuntu 16.04 MySQL 5.7.21 (腾讯云)
防火墙配置
配置主服务器只允许特定IP
访问数据库的端口,避免不必要的攻击。
主库防火墙配置
从库防火墙配置
主数据库master配置
1.修改mysql配置
在[mysqld]部分进行如下修改:
2.修改需要同步的表的引擎为INNODB,只有INNODB支持主从,MyISAM不支持
3.重启mysql,创建用于同步的用户账号
创建用户并授权:用户:repl 密码:slavepass
4.查看master状态,记录二进制文件名(mysql-bin.000001)和位置(333802):
5.主库备份,为从库的第一次数据同步准备数据
使用如下脚本产生数据库备份文件
执行脚本,确保最后输出备份成功
从服务器slave配置
1.修改mysql配置
修改server-id,每个数据库的server-id要求是唯一的,不能相互冲突
2.首次还原数据库:
还原完成后,把数据库设置成只读模式,如果从库可写会出现冲突导致同步失败
添加如下语句:
3.重启mysql,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):
4.启动slave同步进程:
5.查看slave状态:
当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。接下来就可以进行一些验证了,比如在主master数据库的test数据库的一张表中插入一条数据,在slave的test库的相同数据表中查看是否有新增的数据即可验证主从复制功能是否有效,还可以关闭slave(mysql>stop slave;),然后再修改master,看slave是否也相应修改(停止slave后,master的修改不会同步到slave),就可以完成主从复制功能的验证了。
还可以用到的其他相关参数:
master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:
如之前查看master状态时就可以看到只记录了test库,忽略了manual和mysql库。
注意,偶尔在系统升级的时候,从库可能会丢失同步状态配置。这时候,我们需要重新同步,此时我们从从设备/var/lib/mysql/master.info
中找到被中断的同步点。
里面的内容一般如下:
注意mysql-bin.000582
下面的4765083
就是同步位置,在恢复的时候,就是这两个关键数据。
参考链接
- 基于ssl的mysql的主从复制及排错
- MySQL主从复制(Master-Slave)实践
- Linux 配置mysql主从同步的iptables设置
- iptables 只拒绝某个ip的所有连接
- How to save rules of the iptables? [duplicate]
- MySQL主从复制与主主复制
- mysql-proxy 实现读写分离
- mysql主从同步不一致后的解决方法
- Replication breaks on delete from wordpress
- MySQL将某个数据库下的所有表的存储引擎修改为InnoDB类型语句
- mysql批量更新所有表的引擎为innodb
- mysql主从复制跳过错误
- FLUSH TABLES WITH READ LOCK 和 LOCK TABLES
- MySQL 5.7 下的对super用户只读
- mysql 备库重做步骤
- 【MySQL】MySQL主从库配置和主库宕机解决方案
- Mysql主从同步(复制)
- CLI options deprecation warnings of mysqldump are printed to stdout