暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

配置MySQL8主从复制

原创 沉默的大多数 2022-03-30
5869

实现MySQL主从复制需要进行的配置

主服务器:

  • 开启二进制日志
  • 配置唯一的server-id
  • 获得master二进制日志文件名及位置
  • 创建一个用于slave和master通信的用户账号

从服务器:

  • 配置唯一的server-id
  • 备份master节点数据库
  • 将master节点数据库还原到slave数据库
  • 使用master分配的用户账号读取master二进制日志
  • 启用slave服务

一、准备工作:

最好确保主备节点服务器一致

[root@pg_slave mysql]# more /etc/redhat-release CentOS Linux release 7.9.2009 (Core)

查看数据库版本,数据库版本一致。

mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.28 | +-----------+ 1 row in set (0.00 sec)

Master节点:192.168.7.131
Slave节点:192.168.7.132

二、主数据库master修改:

1.修改mysql配置

修改配置文件/etc/my.cnf
MySQL安装启动后,默认已经开启二进制日志;Master节点log-bin和server-id保持不变即可。
如果想要更改二进制日志的位置,则需要进行二进制日志的迁移。

1.停止数据库
[root@pg_master mysql]# systemctl stop mysqld
2.安装MySQL工具集
wget https://cdn.mysql.com/Downloads/MySQLGUITools/mysql-utilities-1.6.5-1.el7.noarch.rpm
yum localinstall -y mysql-utilities-1.6.5-1.el7.noarch.rpm
3.启动mysqlbinlogmove工具
3.1创建新的二进制目录日志/binlogs
mkdir /binlogs
3.2执行二进制文件迁移
[root@pg_master mysql]# mysqlbinlogmove --bin-log-basename=binlog --binlog-dir=/var/lib/mysql/ /binlogs
Traceback (most recent call last):
File “/usr/bin/mysqlbinlogmove”, line 26, in
import mysql.utilities.command.binlog_admin as binlog_admin
ImportError: No module named utilities.command.binlog_admin
报错,执行该语句后正常
[root@pg_master mysql]# ln -s /usr/lib/python2.7/site-packages/mysql/utilities /usr/lib64/python2.7/site-packages/mysql/utilities
3.3手动将binlog.index文件拷贝到/binlogs[否则提示mysqld: File ‘/binlogs.index’ not found (OS errno 13 - Permission denied)]
mv /var/lib/mysql/binlog.index /binlogs
chgrp -R mysql /binlogs && chown -R mysql.mysql /binlogs
3.4关闭SElinux
不关闭会导致启动失败
日志提示 mysqld: File ‘/binlogs/binlog.rec’ not found (OS errno 13 - Permission denied)
journalctl -xe 查看详细信息提示
SELinux is preventing /usr/sbin/mysqld from write access on the directory binlogs. For complete SELinux messages run: sealert -l cbf41024-ac8d-4cd9-a5b7-a9
查看SELinux状态:
1、/usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态
SELinux status:                 enabled
2、getenforce                 ##也可以用这个命令检查
关闭SELinux:
1、临时关闭(不用重启机器):
setenforce 0                  ##设置SELinux 成为permissive模式
                              ##setenforce 1 设置SELinux 成为enforcing模式
2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可
4.更新my.cnf,修改log_bin位置
log_bin=/binlogs/binlog
server_id=1
5.启动MySQL服务器
systemctl start mysqld
mysql> show variables like ‘log_bin%’;
±--------------------------------±----------------------+
| Variable_name | Value |
±--------------------------------±----------------------+
| log_bin | ON |
| log_bin_basename | /binlogs/binlog |
| log_bin_index | /binlogs/binlog.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
±--------------------------------±----------------------+
5 rows in set (0.04 sec)

在[mysqld]部分插入如下两行

[mysqld]
log-bin=/binlogs/binlog #开启二进制日志
server-id=1 #设置server-id

2.修改Master允许远程连接
2.1如果新建用户
MySQL 8 默认认证方式改为 SHA2 了,需要把这个认证方式改为密码认证[WITH mysql_native_password]
并且在mysql8中不能使用赋权的方式创建用户。

mysql> CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1qaz@WSX';#创建用户 mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';#分配权限 mysql>flush privileges; #刷新权限

2.2 如果已存在用户,则rename

RENAME USER 'root'@'localhost' TO 'root'@'%'; --原有账号修改 host 使这个账号可远程访问

2.重启mysql,创建用于同步的用户账号
打开mysql会话

shell>mysql -hlocalhost -uname -ppassword

创建用户并授权:用户:rel1密码:1qaz@WSX

mysql> CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY '1qaz@WSX';#创建用户 mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';#分配权限 mysql>flush privileges; #刷新权限

3.查看Master状态(binlog.000008)和位置(157)

mysql> show master status\G *************************** 1. row *************************** File: binlog.000008 Position: 157 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec)

二、从服务器slave修改:

1.修改mysql配置
同样找到my.cnf配置文件,添加server-id

[mysqld] server-id=2 #设置server-id,必须唯一

2.备份主库数据

mysqldump -h 192.168.7.131 -uroot -p --all_databases --routines --events --single-transaction > dump.sql

3.备份完成后恢复此备份

mysql -uroot -p -f <dump.sql

4.重置slave
因为我之前配置过主从复制,先重置slave状态。

mysql> reset slave; Query OK, 0 rows affected, 1 warning (0.04 sec)

5.执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):

CHANGE MASTER TO MASTER_HOST='192.168.7.131', MASTER_USER='repl', MASTER_PASSWORD='1qaz@WSX', MASTER_LOG_FILE='binlog.000008', MASTER_LOG_POS=157;

6.开启slave,并查看状态

Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0

前两个都是Yes,Seconds_Behind_Master为0,则说明同步状态正常

mysql> start slave; Query OK, 0 rows affected, 1 warning (0.04 sec) mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for source to send event Master_Host: 192.168.7.131 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: binlog.000008 Read_Master_Log_Pos: 157 Relay_Log_File: pg_slave-relay-bin.000002 Relay_Log_Pos: 323 Relay_Master_Log_File: binlog.000008 Slave_IO_Running: Yes Slave_SQL_Running: Yes

7.在Master节点创建表,测试同步情况
略。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论