一、主从复制原理
MySQL
主从复制是一个异步
的复制
过程,主库
发送更新事件
到从库
,从库
读取更新记录
,并执行
更新记录
,使得从库
的内容与主库保持一致
。每一个主从复制
的连接,都有三个线程
。拥有多个从库
的主库
为每一个连接
到主库
的从库
创建一个 log dump
输出线程,每一个从库
都有它自己的 I/O
线程和 SQL
线程。
步骤:
1.主库
会将所有
的更新
记录保存到 Binarylog
文件。
2.每当有从库
连接到主库
的时候,主库
都会创建一个 log dump
线程发送 Binarylog
文件到从库
。
3.当从库
复制开始的时候,从库
就会创建两个线程
进行处理,一个 I/O
线程,一个 SQL
线程。
4.I/O
线程去请求主库
的 Binarylog
文件,并将得到的 Binarylog
文件写到 Relaylog
文件中。
5.SQL
线程会读取 Relaylog
文件中的日志,并解析
成具体操作
,来实现主从
的操作一致
,而最终数据一致。
二、工具
-
VMware版本:12.0.0
-
Ubuntu版本:16.4
-
MySQL版本 :5.7.18
-
Master 服务器:192.168.128.1
-
Slave 服务器 :192.168.128.3
三、准备工作
1.安装 MySQL5.7 详见此处 ,我这里的配置是,master 是安装在本地windows环境下的mysql,slave是安装在虚拟机linux下的mysql
2.如果从服务器
是克隆
的主服务器
,则修改 auto.cnf
文件中 server-uuid
值,不然后面主从复制
会报 1593
错误,修改完记得重启MySQL
3.关闭主、从
服务器防火墙
:
root@ubuntu:/etc# ufw disable
4.修改主从配置
文件(my.cnf):
## 192.168.128.1(master) #打开日志 log_bin=mysql-bin #这个id不要与从数据库id一样,改id一般取当前服务器ip地址最后一位 server_id=1 binlog-do-db=cpa #要给从机同步的库 binlog-ignore-db=mysql #不要给从机同步的库 #自动清理1天前的log文件 expire_logs_days=1 ## 192.168.128.3(slave) log_bin=mysql-bin server_id=3
重启
主从 MySQL
注
: server_id
必须唯一。
四、主从复制
1.master
创建授权用户:192.168.128.1(master)
:
## 创建 test 用户,指定该用户只能在主库 192.168.128.3 上使用 MyPass1! 密码登录 mysql> create user ‘test‘@‘192.168.128.3‘ identified by ‘MyPass1!‘; ## 为 test 用户赋予 REPLICATION SLAVE 权限。 mysql> grant replication slave on *.* to ‘test‘@‘192.168.128.3‘; ## 查看用户 mysql> select user,host from mysql.user; ## 查看 master 状态 mysql> show master status;
注
:
这里的 mysql-bin.000001
和 Position
值 slave
配置时需要用到。
2.将 master
中现有的数据信息导出
:
$ mysqldump -u root -p --all-databases --master-data > all.sql
3.将 all.sql
发送到 slave
服务器 tmp
目录下:
$ scp all.sql root@192.168.78.130:/tmp
4.slave
导入 master
数据,使 master-slave
数据保持一致
:
$ mysql -uroot -p < all.sql
注:2,3,4步主要作用是使主从数据库的数据保持一致,这里如果不会使用命令导出导入sql文件的话,可以借助工具实现,如Navicat
5.使 slave
与 master
建立连接,从而同步: