介绍
MySQL 主从复制是一个异步的 复制过程,底层是基于 MySQL 数据库自带的 二进制日志 功能。就是一台或多台 MySQL 数据库 (slave, 即 从库) 从另一台(master,即 主库) 进行日志的复制然后再解析日志并应用到自身,最终实现实现 从库 的数据和 主库 的数据保持一致。MySQL 主从复制 是 MySQL 数据库自带的功能,无需借助第三方工具
MySQL 复制分成三步
-
master 将改变记录到 二进制日志 (binary log)
-
slave 将 master 的 binary log 拷贝到 它的中继日志(relay log)
-
slave 重做中继日志中的事件,将改变应用到自己的数据库
前提准备
这里至少需要两台服务器分别安装 MySQL 并且成功启动。也可以用 虚拟机,装好一个 克隆出一个作为 从机不过要改一下 IP 以及 hostname。
-
master 将改变记录到 二进制 日志 binary log 中
修改 MySQL 数据库的配置文件
vim /etc/my.cnf
添加以下 代码
log-bin=mysql-bin #启用二进制日志 server-id=100 #id 作为服务器唯一标识,不重复即可
-
保存退出后 重启 MySQL 服务
systemctl restart mysqld
-
我们需要在 master 下 创建一个 用户,给他授予权限,slave 才能通过 该用户来拷贝它记录的 日志文件。先登陆到 MySQL
mysqld -uroot -p
-
创建一个用户叫作 cccs7,密码是 Root@C020611.,并给该用户授予权限
MySQL8.x 下使用以下代码
create user cccs7 identified by 'Root@C020611.'; grant replication slave on *.* to cccs7;
-
查看主库状态
show master status\G
接下来 主库就不要操作了,一旦操作,记录位置就会发生变化,这个位置和文件名,一会配置从库时要用
-
slave 将 master 的 binary log 拷贝到它的中继日志 relay log
先修改 MySQL数据库的配置文件
vim /etc/my.cnf
添加以下代码
server-id=101
保存退出后重启 MySQL 服务
systemctl restart mysqld
-
再次登陆 MySQL,执行以下操作
change master to master_host='填入master的ip',master_user='上面创建的用户',master_password='上面设置的',master_log_file='主库刚查的日志名称',master_log_pos=刚查的记录位置;
-
启动 slave
start slave;
-
查看从库状态
show slave status\G;
-
完事后,重启 MySQL服务
-
-
配置完之后,两个io 都为 yes 即可