快速实现 MySQL 主从复制

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。快速实现 MySQL 主从复制,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

MySQL 主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台 MySQL 数据库(Slave 库)从另一台 MySQL 数据库(master 库)进行日志的复制,然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL 主从复制是MySQL数据库自带功能,无需借助第三方工具。

binlog(二进制日志)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL 的主从复制, 就是通过 binlog 实现的。默认MySQL 是未开启该日志的。

MySQL的主从复制原理如下:

image

复制过程分为三步:

1). MySQL master 将数据变更写入二进制日志( binary log)

2). slave 将 master 的 binary log 拷贝到它的中继日志(relay log)

3). slave 重做中继日志中的事件,将数据变更反映它自己的数据

一、搭建前的准备工作

提前在两台 CentOS7 服务器上安装好 mysql ,本博客服务器信息如下:

Mysql角色 IP 数据库版本
Master 192.168.216.218 5.7.41
Slave 192.168.216.219 5.7.41

两台 CentOS7 服务器上的防火墙,都开通 3306 端口即可。

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports

二、Master 数据库操作

修改 Mysql 的配置文件 /etc/my.cnf ,在 [mysqld] 下增加以下内容:

log-bin=mysql-bin
server-id=218

image

然后重启 mysql 服务:

systemctl restart mysqld

登录到 mysql 中,创建一个专门用于数据同步的用户,并给予数据同步的权限:

# 此处创建了一个名称为 datasync 的用户,密码为 Sync@123456 ,并授予数据同步权限
GRANT REPLICATION SLAVE ON *.* to 'datasync'@'%' identified by 'Sync@123456';

查看 master 的状态,记录 File 和 Position 的值:

show master status \G;

image

三、Slave 数据库操作

修改 Mysql 的配置文件 /etc/my.cnf ,在 [mysqld] 下增加以下内容:

server-id=129

image

然后重启 mysql 服务:

systemctl restart mysqld

登录 mysql 数据库,然后设置 master 数据库的连接信息和同步位置:

change master to master_host='192.168.216.128',master_user='datasync',master_password='Sync@123456',master_log_file='mysql-bin.000002',master_log_pos=1641;

查看从库的状态,如果 Slave_IO_Running 和 Slave_SQL_Running 都是 Yes 的话,表示主从复制已经配置成功。

show slave status \G;

image

此时在 Master 库上,对数据库进行增删改,以及对表进行增删改,都会同步到 Slave 库中。

四、Slave_IO_Running 为 No 的解决方案

主要原因是 Slave 库所在服务器的 /var/lib/mysql/auto.cnf 文件中 server-uuid 的值,跟 Master 库所在服务器的相应文件中的 server-uuid 中的值相同导致的问题。之所以会相同,很可能是是因为虚拟机复制导致的问题。此时只需要将 Slave 服务器中的 /var/lib/mysql/auto.cnf 删除掉,然后重启 Slave 的 mysql 即可生成新的 auto.cnf 文件。

cat /var/lib/mysql/auto.cnf

image

systemctl restart mysqld

把上面的 Slave 库的操作再做一遍即可,查看主库状态,登录 Slave 的 mysql 数据库,设置 master 数据库的连接信息和同步位置,查看从库状态,直到看到 Slave_IO_Running 和 Slave_SQL_Running 都是 Yes 为止。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/191103.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!