前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux下mysql8主从同步配置

linux下mysql8主从同步配置

作者头像
萌萌哒的瓤瓤
发布2021-01-13 17:38:36
2.7K0
发布2021-01-13 17:38:36
举报

1.修改master配置文件

代码语言:javascript
复制
vim /etc/my.cnf

添加以下代码:

代码语言:javascript
复制
[mysqld]#这里如果已经配置过就忽略
basedir=/usr/local/mysql
datadir=/data/mysqldata
socket=/tmp/mysql.sock
user=mysql
port=3306

# master的配置
server-id=1             # 服务器id (设置唯一标识)
binlog-do-db=数据库名称  # 要给从机同步的库
binlog-ignore-db=mysql  # 不给从机同步的库(多个写多行)
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
log-bin=mysql-bin           # 打开日志(主机需要打开),可以指定绝对路径;
expire_logs_days=90     # 自动清理 90 天前的log文件,可根据需要修改

2.重启mysql服务,查看是否生效

重启mysql服务:

代码语言:javascript
复制
cd /usr/local/mysql/bin  #先切换到mysql的bin目录下

因为我们之前并没有将mysql服务添加到系统服务之中,所以必须要要到mysql的bin目录下启动服务

代码语言:javascript
复制
service mysql restart

服务重启过后,我们登陆mysql,并且查看log_bin是否成功开启:

代码语言:javascript
复制
mysql -uroot -p密码
代码语言:javascript
复制
show variables like '%log_bin%';
在这里插入图片描述
在这里插入图片描述

显示为 on 则表示已经成功开启

3.master数据库上创建主从同步账户:

代码语言:javascript
复制
create user '同步账户名'@'从机账户' identified by '密码';

grant replication slave on *.* to 同步账户名@从机ip;

flush privileges; 

select Host,User,authentication_string from mysql.user;

出现下面的数据就说明账户已经建立:

在这里插入图片描述
在这里插入图片描述

4.master锁表

代码语言:javascript
复制
 flush table with read lock;     # 主库锁表;默认28800秒,即8小时自动解锁;
     
 show master status \G
在这里插入图片描述
在这里插入图片描述

要和上面那一段一致.

5.拷贝数据库至从库

代码语言:javascript
复制
/usr/local/mysql/bin/mysqldump -uroot -p密码 数据库名称 > /opt/数据库名称.sql (这里代表数据库脚本文件存在的位置)
代码语言:javascript
复制
yum install openssh-clients -y   #相当开启ssh权限
代码语言:javascript
复制
scp /opt/数据库名称.sql root@从机ip地址:/opt/
在这里插入图片描述
在这里插入图片描述

6.配置从数据库的配置文件

代码语言:javascript
复制
vim /etc/my.cnf

添加下面的代码:

代码语言:javascript
复制
[mysqld]#如果有已经添加过的,请忽略
basedir=/usr/local/mysql    # mysql程序路径
datadir=/data/mysqldata     # mysql数据目录
socket=/tmp/mysql.sock
user=mysql
port=3306

# slave配置
server-id=2                 # MySQLid 后面2个从服务器需设置不同
skip_slave_start=1          # 复制进程不会随着数据库的启动而启动,重启数据库后需手动启动;
#加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。
read_only = 1               # 从库普通账户只读;
master_info_repository=TABLE
relay_log_info_repository=TABLE
slave-skip-errors = 1032, 1062, 1007
#relay_log_recovery=1       # 从机禁止写
#super_read_only=1          # 从机禁止写

重启数据库并且登录:

代码语言:javascript
复制
service mysql restart
    
cd /usr/local/mysql/bin
    
./mysql -uroot -p密码

7.新建数据库并且合并

如果没有该数据库的话,需要新建数据库:

代码语言:javascript
复制
create database 数据库名称;

之后再/usr/local/mysql/bin路径下执行以下命令:

代码语言:javascript
复制
./mysql -uroot -p 数据库名称 < /opt/数据库名称.sql

这样就已经将数据库拷贝过来了,这是我们可以去Navicat里面查看,发现的确是已经拷贝过来了:

在这里插入图片描述
在这里插入图片描述

8.配置主库信息,实现主从同步

定制主数据库数据,如果不是第一次设置的,设置之前需要先停掉slave服务:

代码语言:javascript
复制
stop slave;
代码语言:javascript
复制
change master to
master_host='主服务器ip',     # master的ip
master_user='同步账户',            # 备份用户名
master_password='同步账户密码',        # 密码
master_log_file='日志文件',    # 三.3,且要与master的参数一致
master_log_pos=日志文件偏移量;              # 三.3,且要与master的参数一致
#以上参数必须要和上面的参数保持一致!!!!!

之后我们启动slave服务

代码语言:javascript
复制
start slave;
show slave status \G  #查看slave服务
在这里插入图片描述
在这里插入图片描述

其实到这里我们就已经完成了主从同步复制,这个错误误伤大雅,主要是mysql8开始使用 caching_sha2_password 加密方式,所以识别不出来我们的密码,但不影响使用,但是强迫症的我们还是决定将这个解决,只要重新回到主库的mysql控制台下修改同步账户的加密方式即可,代码如下:

代码语言:javascript
复制
alter user 'backup'@'192.168.1.150' IDENTIFIED WITH mysql_native_password BY 'zkkj0002';

flush privileges;

select user,host,plugin,authentication_string from mysql.user \G

可以看到这样的画面就证明加密方式已经修改了:

1599825432438
1599825432438

并且重启我们的mysql服务,再重复一次上述的操作,我们就能看到下面这段美妙的画面了:

在这里插入图片描述
在这里插入图片描述

我们再去关闭以下 主数据库的读锁定 就行了.

代码语言:javascript
复制
unlock tables;

到这里我们的同步复制就已经配置完成了.

9.检测是否实现主从同步

最后我们就只需要再来检测以下就行了.

主库操作:

代码语言:javascript
复制
use 数据库名称;
create table test001(id int auto_increment primary key,name varchar(20) not null);
insert into test001 values(null,'will');
insert into test001 values(null,'jim');
insert into test001 values(null,'tom');
select * from 数据库名称.test001;
在这里插入图片描述
在这里插入图片描述

从库操作:

代码语言:javascript
复制
use 数据库名称;
select * from 数据库名称.test001;
在这里插入图片描述
在这里插入图片描述

显然没有同步好,所以我们查看错误原因:

代码语言:javascript
复制
show slave status \G
在这里插入图片描述
在这里插入图片描述

经过检查发现可能是由于数据库字符集有差异,这里我们检查一下主库和从库的字符集:

在这里插入图片描述
在这里插入图片描述

可以对比一下我们就能发现的确是由于字符集的问题,我们修改完字符集再来看看:

在这里插入图片描述
在这里插入图片描述

如果你的结果和上述截图一样的话,那么恭喜你,同步复制工作就已经配置好了.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.修改master配置文件
  • 2.重启mysql服务,查看是否生效
  • 3.master数据库上创建主从同步账户:
  • 4.master锁表
  • 5.拷贝数据库至从库
  • 6.配置从数据库的配置文件
  • 7.新建数据库并且合并
  • 8.配置主库信息,实现主从同步
  • 9.检测是否实现主从同步
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档