推荐博客:https://blog.51cto.com/lizhenliang/1290431
主从复制是一种数据备份方案,在这种数据备份方案中,会使用两个或两个以上相同的数据库,将一个数据库当做主数据库,另一个 (或其他) 数据库当做从数据库。在主数据库中进行相应操作时,从数据库记录下所有主数据库的操作,使得二者一模一样
基本原理

主从复制分为同步复制,异步复制和半同步复制
基本原理是 slave 会从 master 中读取二进制日志来进行数据同步,复制过程如下
- master 将数据变动记录到二进制日志中,这些记录被称为二进制日志事件
- slave 将 master 的二进制日志时间拷贝到自己的中继日志中 ( relay log )
- slave 重做中继日志中的事件,将数据变动应用到自己的数据库中
复制的最大问题是网络延时
复制的基本规则
每个 slave 只能有一个 master
每个 slave 只能有一个唯一的服务器 ID
每个 master 可以有多个 slave
一主一从
配置主从复制的要求
- MySQL 版本最好一致
- 主从都配置在 [mysqld] 结点下,都是小写
- 主从机能互相 ping 通
主机修改配置文件
这里使用 windows 作为主机,首先查出主机的 IP,我自己的为:192.168.19.100
windows 下的配置文件为 my.ini
需要添加下列配置
#主服务器 idserver-id = 1#启用二进制文件log-bin = 本地MySQL安装路径/[子路径/]mysqlbin#启用错误日志 (可选)log-err = 本地MySQL安装路径/[子路径/]mysqlerr#根目录 (可选)basedir = 本地MySQL安装路径#临时目录 (可选)tmpdir = 本地MySQL安装路径#数据目录 (可选)datadir = 本地MySQL安装路径/Data/#设置不要复制的数据库 (可选)binlog-ignore-db = 不需要复制的数据库名字#设置需要复制的主数据库名字 (可选),多个数据库之间不能以, 分割binlog-do-db = 需要复制的主数据库名字
修改完成后重启数据库
从机修改配置文件
从机使用 Linux ,配置文件为 my.cnf,需要配置如下
#从服务器唯一 ID
server-id = 2
#启用二进制文件 (可选)
log-bin = mysql-bin
修改完成后重启数据库
关闭防火墙
主,从机都需要关闭防火墙 ( 或者配置进出规则 )
授权 slave
在 windows 主机上建立账户,并授权给 slave
首先,执行命令
GRANT REPLICATION SLAVE
ON *.* TO 'zhangsan'@'从机IP' IDENTIFIED BY '123456';
zhangsan 为从机访问主机使用的用户名,123456 为从机访问主机使用的密码
然后刷新一下
FLUSH PRIVILEGES;
最后执行命令
show master status;

记录下 file 和 position 的值
此步骤完成后不要再对主数据库进行任何操作,避免状态变化
tips:如果在下一步中,查看从机状态时一直连接不上,就把这一步中的从机 IP 改为 %
配置需要复制的主机
在从机上配置需要复制的主机
执行命令
change master to master_host="主机IP",
master_user="zhangsan",
master_password="123456",
master_log_file="上面查出来的file的值",
master_log_pos=上面查出来的position的值;
然后启动从数据库复制功能
start slave;
执行命令查看状态
show slave status;

这样即是成功
测试
在主机上,创建一个数据库
create database aaaaaaaaaaaaa;
然后查看从机 data 文件夹 ( 用来存储数据库和表的 )

可以发现同步成功
crud 的同步一样可以成功
如果想要停止主从复制,在从机数据库执行
stop slave;
即可
