介绍
MySQL主从复制是一个异步的复制过程,底层是基于MySQL数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带的功能,无需借助第三方工具。
MySQL复制过程分成三步:
- master将改变记录到二进制日志(binary log)
- slave将master的binary log拷贝到它的中继日志(relay log)
- slave重做中继日志中的事件,将改变应用到自己的数据库中
总的来说,和小学生抄作业是一样的。
提前准备好两台服务器,分别安装MySQL并启动服务成功
-
主库master:192.168.74.129
-
从库slave:192.168.74.130
配置主库master
-
修改mysql数据库的配置文件/etc/my.cnf
[mysqld] log-bin=mysql-bin #启用二进制日志 server-id=100 #服务器唯一ID -
重启mysql服务
systemctl restart mysqld -
登录mysql数据库,执行下面的sql
grant replication slave on *.* to 'xiaoming' identified by '123456';注:上面sql的作用是创建一个用户xiaoming,密码为123456,并且给xiaoming用户授予replication slave权限。常用于复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。
可以理解为xiaoming想抄master的作业,必须得到master的同意(权限)。
-
登录mysql数据库,执行下面的sql,记录下结果中File和Position的值
show master status;注:上面sql的作用时查看master的状态,执行完此sql后不要再执行任何操作。
至此,主库master配置完成。
配置从库slave
-
修改mysql数据库的配置文件/etc/my.cnf
[mysqld] server-id=101 #服务器唯一ID -
重启mysql服务
systemctl restart mysqld -
登录mysql数据库,执行下面的sql
change master to master_host='192.168.74.129',master_user='xiaoming',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1073;start slave; -
登录mysql数据库,执行下面sql,查看从数据库状态
show slave status\G;
测试
使用Navicat登录以上两个数据库。在主库master:192.168.74.129中新建一个数据库test, 然后刷新从库slave:192.168.74.130,可以发现从库中也会执行相同的操作。