1.首先需要注意的事项
- 注意防火墙,需要关闭对mysql(3306)端口的保护
- mysql的主从复制并不会像redis的主从复制一下从头复制,它只会从接入点开始算
- 如果说是克隆的虚拟机,请修改mysql的uuid
2.搭建一主一从
一个主机用于负责所有读请求,一个主机用于所有写请求
2.1架构图
2.2 主从复制原理
mysql开启主从复制后,从库会通过网络io获取主库的Binarylog日志,Binarylog日志包含了主库的所有的写请求的操作记录,读取日志后,从库并不会马上的写入数据同步到从库数据库中,而是先写入Relaylog日志文件中,在同步数据。
原理图
2.3 binlog日志三种格式
mysql的binlog日志分为STATEMENT、ROW、MINED
- STATEMENT模式:基于sql语句的复制,每一行会修改数据的sql语句将会被记录
优点:它的优点在于不需要记录每一条sql语句与每行的数据变化,这样子binlog日志也会比较少,减少了磁盘io,提高了性能。
缺点:可能导致数据不一样的情况,比如使用now等函数
- ROW模式:基于行的复制,不记录每一条sql语句的上下文信息,仅需记录那些语句被修改了。
优点:不会出现某些情况下特定函数导致的数据不一致问题
缺点:在进行alter table语句时,会产生大量的日志
- MINED模式:混合模式,也就是STATEMENT和ROW两种模式的结合模式,一般使用STATEMENT来保存日志,如果碰到STATEMENT处理不了了的则使用ROW保存
2.3 主机配置
修改配置文件:/etc/my.conf
#主服务器唯一IDserver-id=1#启用二进制日志log-bin=mysql-bin# 设置不要复制的数据库(可设置多个)binlog-ignore-db=mysqlbinlog-ignore-db=information_schema#设置需要复制的数据库binlog-do-db=需要复制的主数据库名字#设置logbin格式binlog_format=STATEMENT
2.4 从机配置
修改配置文件: /etc/my.conf
#从服务器唯一IDserver-id=2#启用中继日志relay-log=mysql-relay
2.5 修改完配置后需要做的事情
mysql 6.x
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
mysql 8.x
2.6.2 查看配置
使用 show master status命令,需要记录File和Position字段,后面会用到
2.7 在从机配置需要复制的主机
2.7.1 配置命令(需要配置ip地址和具体指)
CHANGE MASTER TO MASTER_HOST='主机的IP地址',MASTER_USER='slave',MASTER_PASSWORD='123123',MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;
2.7.2 配置完成后,开启复制功能并查看服务器状态
- 使用start slave命令开启复制功能
- 使用show slave status\G以行的方式查看服务器状态,确保SLAVE_IO_Running和Slave_SQL_Running为yes状态
3 失败解决
3.1 失败原因1,可能是曾经搭建过主从复制,需要重置
- 使用show variables like ‘datadir’命令查看当前mysql的安装目录

- 然后通过select uuid()生成一串uuid


