MySQL8从零数据开始主从复制

为什么要复制数据库?

简单来说有以下几个用处:

1. 读写分离
通过MySQL复制可以实现读写分离,将读操作分布到多个不同的服务器上,减轻服务器的压力。

2. 备份  
从库可以作为数据的异地实时备份。

3. 故障切换  
当主库遇到故障,系统可以切换到从库,实现故障切换。

4. 升级测试  
从库可作为测试服务器的数据库。

主从复制图示如下:
MySQL8从零数据开始主从复制

复制数据的步骤

  1. 在主库上把数据更改记录到二进制日志(Binary Log)中。

  2. 备库将主库上的日志复制到自己的中继日志(Relay Log)中。

  3. 备库读取中继日志中的事件,将其在备库上重新执行一遍。



MySQL8从零数据开始主从复制


具体操作步骤

主服务器地址:10.145.1.17
从服务器地址:10.145.1.22

分别登录主从服务器上的MySQL

MySQL8从零数据开始主从复制

在主从服务器上分别新建数据库sync

MySQL8从零数据开始主从复制

这样主从服务器上都新建了一个新的数据库sync。

创建复制账号repl,并赋予replication slave权限

create user ‘repl’@’10.145.1.%’ identified by ‘Repl123!@#’;

grant replication slave on *.* to ‘repl’@’10.145.1.%’;

MySQL8从零数据开始主从复制


修改主备数据库的配置文件

主服务器配置

用命令 whereis my.cnf  找到my.cnf文件的位置,然后用vim打开

MySQL8从零数据开始主从复制

在文件中添加:

log_bin = mysql-bin
server_id = 17

这里的log_bin为日志文件名,自己取一个名词, server_id 只要唯一就行。

MySQL8从零数据开始主从复制

systemctl restart mysqld 重启mysql

MySQL8从零数据开始主从复制

重新登录mySQL

输入命令show master status; 

可以看到file那一列变成了mysql-bin.000001,配置成功。

MySQL8从零数据开始主从复制


从服务器配置

退出mysql,找到并编辑my.cnf文件

MySQL8从零数据开始主从复制

添加以下内容:
log_bin = mysql-bin
server_id = 22
relay_log = /var/lib/mysql/mysql-realay-bin
log_slave_updates = 1
read_only = 1

log_bin默认情况下会使用机器名命名,这里设成和主库相同的名称,当然也可以设置成其他名称。

relay_log指定中继日志的位置和名字,log_slave_updates允许备库将其重放事件记录到自身的二进制文件中,read_only会阻止没有权限的线程修改数据。

这里其实只有server_id是必填项,其他都是选填的。

MySQL8从零数据开始主从复制

保存好配置文件后,重启mysql

MySQL8从零数据开始主从复制

重新进入MySQL,使用change master to命令开始复制:

change master to master_host=’10.145.1.17′,
master_user = ‘repl’,
master_password = ‘Repl123!@#’,
master_log_file = ‘mysql-bin-000001’,
master_log_pos = 0;

MySQL8从零数据开始主从复制


输入命令show slave statusG;查看状态

MySQL8从零数据开始主从复制


图中显示:
Slave_IO_Running: No
Slave_SQL_Running: No
表示当前备库还没有开始复制。


输入命令:start slave;开始复制。

MySQL8从零数据开始主从复制


图中显示:
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes

Connecting说明还未连接成功。

哪里出问题了呢?

用show grants for ‘repl’@’10.145.1.%’;命令查看,权限已经授予成功了。

MySQL8从零数据开始主从复制

查一下mysql日志
vim /var/log/mysqld.log
MySQL8从零数据开始主从复制

最下面显示
Could not find first log file name in binary log index file

MySQL8从零数据开始主从复制


在网上搜了一下,在主服务器上运行flush logs;后查看最新的bin-log变成了mysql-bin.000002。

MySQL8从零数据开始主从复制

在从服务器上执行

MySQL8从零数据开始主从复制

发现还是不行。

到底哪里出了问题呢???

我查了好久,心力憔悴啊,终止发现了问题!

MySQL8从零数据开始主从复制

我把mysql-bin.000002写成了mysql-bin-000002!我去,心好累啊。。。

重新设置,这次终于成功了!

MySQL8从零数据开始主从复制

哎,不容易啊。

在主数据库上运行 show processlistG;
显示了来自10.145.1.22的连接,并等待更多的更新。

MySQL8从零数据开始主从复制

在从数据库上show processlistG;
显示等待主服务器的数据。

MySQL8从零数据开始主从复制

好了,现在我们来验证一下:

刚开始都没数据,在主数据库上建表,并插入数据:

MySQL8从零数据开始主从复制


从数据库同步了数据:

第一次show tables没数据,第二次show tables的时候已经同步了主数据库上的数据,也就有了数据。

MySQL8从零数据开始主从复制

自此主从复制设置完成,最后感慨一句,做程序员,细心真的很重要啊。。。








原文始发于微信公众号(编程我也会):MySQL8从零数据开始主从复制

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

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

(0)
Java朝阳的头像Java朝阳

相关推荐

发表回复

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