MySQL8.0.33主从复制配置记录

官网:https://dev.mysql.com/downloads/mysql/
8.0.33
在这里插入图片描述

1. 下载

在线下载或者下载到本地再上传

cd /usr/local

准备wget下载工具:

yum install wget -y
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-el7-x86_64.tar.gz

在这里插入图片描述
下载


2. 解压

tar -zxvf mysql-8.0.33-el7-x86_64.tar.gz -C /usr/local/

3.重命名

mv mysql-8.0.33-el7-x86_64 mysql

4.创建存储数据文件

mkdir mysql/data

5. 设置用户组并赋权

groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql /usr/local/mysql/
chmod -R 755 /usr/local/mysql

6. 初始化MySQL

进入MySQL的bin目录

cd mysql/bin

初始化并得到密码

./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql

./mysqld: error while loading shared libraries: libnuma.so.1: cannot
open shared object file: No such file or directory
报错,缺依赖::::
yum install -y libaio
yum -y install numactl
再初始化
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql

初始密码

7.配置文件

vi /etc/my.cnf
[client]
#password       = your_password
port               = 3306
socket          = /usr/local/mysql/data/mysql.sock
default-character-set = utf8mb4

[mysql]  
default-character-set = utf8mb4

[mysqld]  
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'

# 服务器唯一id,默认为1,值范围为1~2^32−1. ;主数据库和从数据库的server-id不能重复
server-id=1
# 设置同步的binary log二进制日志文件名前缀,默认是binlog
log-bin=mysql-bin
# 可选配置
# 是否只读 0读写 1只读
read-only=0
# 禁用管理员写操作
# super-read-only=1
# 需要主从复制的数据库 ,如多个则重复配置(不设置则都同步)
# replicate-do-db=user_db.%
#屏蔽系统库同步,如果需要对某个数据库不进行同步则追加以下配置,配置对应的数据库名称,多个的话配置多行
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%

port            = 3306
socket          = /usr/local/mysql/data/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
datadir = /usr/local/mysql/data

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout


8. 启动MySQL

/usr/local/mysql/support-files/mysql.server start

9. 设置软连接,并重启MySQL

ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/mysql.sock /var/mysql.sock 
service mysql restart

10. 登录并更改密码

mysql -u root -p

输入上面初始化获取的初始密码

改密:

alter user 'root'@'localhost' identified by '123456';

11. 开放远程连接

use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;

由于这里将localhost改为了%,所以后续这样就行
alter user ‘root’@‘%’ identified by ‘123456’;
flush privileges;

12. 连接工具测试连接MySQL

服务器上记得放开端口
开放指定端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
–zone #作用域
–add-port=3306/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
测试连接
然后退出MySQL使用 exit,等把从服务器搞好再创建表测试

exit

13. 开机自启配置

将服务文件拷贝到init.d下,并重命名为mysqld

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

赋予可执行权限

chmod +x /etc/init.d/mysqld

添加服务

chkconfig --add mysqld

显示服务列表

chkconfig --list

注:如果看到mysql的服务,并且3,4,5都是开的话则成功,如果是关,则

chkconfig --level 345 mysqld on

14.从服务器配置

安装流程和上面一致,只有配置有细微差别

vi /etc/my.cnf
# 服务器唯一id,默认为1,值范围为1~2^32?1. ;主数据库和从数据库的server-id不能重复
server-id=2
# 设置同步的binary log二进制日志文件名前缀,默认是binlog
log-bin=mysql-bin
# 可选配置
# 是否只读 0读写 1只读
read-only=1
# 禁用管理员写操作
# super-read-only=1
# 需要主从复制的数据库 ,如多个则重复配置(不设置则都同步)
# replicate-do-db=user_db.%
#屏蔽系统库同步,如果需要对某个数据库不进行同步则追加以下配置,配置对应的数据库名称,多个的话配置多行
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%

权限

15. 主库配置

登录主服务器MySQL

mysql -uroot -p

授予主从复制权限

GRANT REPLICATION SLAVE ON *.* TO 'root'@'%';

主数据库
通过指令,查看二进制日志目标

show master status;

目标

16. 从库配置

登录从库服务器MySQL

mysql -uroot -p

关联主服务器(注意主服务器的日志文件 和 位置 名称要一致)
8.0.23之后语法(兼容之前的语法)
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.20.20',SOURCE_USER='root',SOURCE_PASSWORD='123456',SOURCE_LOG_FILE='mysql-bin.000003',SOURCE_LOG_POS=369;

8.0.23之前语法

CHANGE REPLICATION MASTER TO MASTER_HOST='*.*.*.*',MASTER_USER='***',MASTER_PASSWORD='**',MASTER_LOG_FILE='**',MASTER_LOG_POS=**;

MASTER_HOST 主库IP地址
MASTER_USER 连接主库用户名
MASTER_PASSWORD 连接主库密码
MASTER_LOG_FILE binlog日志文件名
MASTER_LOG_POS binlog日志文件位置

配置主库连接
开启同步操作:

8.0.22版本之后(兼容之前的命令)
start replica; 
8.0.22版本之前
start slave;

开启同步操作
查看主从复制状态:

show replica status\G;

UUID
此时发现UUID冲突,需要改下UUID,
退出MySQL

exit;

一般就在 /mysql/data/auto.cnf 文件里面

vi /usr/local/mysql/data/auto.cnf

随便改一个数(长度固定的,少一个启动就会报错,建议就随机调整一个数就行),ESC :wq 保存退出,然后重启MySQL。
UUID

重启MySQL:

service mysql restart

然后再查看同步状态

show replica status\G;

yes

17. 测试:

主服务器新建库、使用库、新建表、插入数据、查询表、查询表数据

CREATE database test;
use test;
CREATE TABLE `tb_user`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `sex` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO `tb_user` VALUES (1, 'coisini', '0');
show tables;
select * from tb_user;

新建数据库
查看从服务器是否同步

use test;
show tables;
select * from tb_user;

数据

总结:
将主库的数据变更同步到从库,保证主从数据一致,可用于数据备份、失败迁移、读写分类、降低单库读写压力。
原理:
主库会把数据变更记录在二进制日志文件binlog中。
从库连接主库,读取binlog日志,并写入自身中继日志relaylog.
slave重做中继日志,将改变反应它自己的数据。


18. 另外Windows上实现主从复制,先部署两台MySQL

参照下这个本地部署多个MySQL,下面贴出我本地的配置,可以参考一下,
主服务器配置:

[mysqld]
# 设置3307端口
port=3307
# 服务器唯一id,默认为1,值范围为1~2^32−1. ;主数据库和从数据库的server-id不能重复
server-id=1
# 主从数据库配置核心部分
# 设置同步的binary log二进制日志文件名前缀,默认为binlog;在MySQL 8.0中,无论是否指定--log bin选项,默认情况下都会启用二进制日志记录,并将log_bin系统变量设置为ON。
log-bin=mysql-bin
# 可选配置
# 是否只读 0读写 1只读
read-only=0
# 需要主从复制的数据库,如多个则重复配置
# binlog-do-db=user_db
# 屏蔽系统库同步
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置mysql的安装目录
basedir=F:/MySQL/mysql-8.0.26-winx64
# 设置mysql数据库的数据的存放目录
datadir=F:/MySQL/mysql-8.0.26-winx64/data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3307
default-character-set=utf8mb4

从服务器配置:

[mysqld]
# 登录跳过权限检查
# skip-qrant-tables
# 从服务器设置3308端口
port=3308
# 服务器唯一id,默认为1,值范围为1~2^32−1. ;主数据库和从数据库的server-id不能重复
server-id=2
# 设置同步的binary log二进制日志文件名前缀,默认是binlog
log-bin=mysql-bin
# 可选配置
# 是否只读 0读写 1只读
read-only=1
# 禁用管理员写操作
# super-read-only=1
# 需要主从复制的数据库 ,如多个则重复配置
# replicate-do-db=user_db.%
#屏蔽系统库同步,如果需要对某个数据库不进行同步则追加以下配置,配置对应的数据库名称,多个的话配置多行
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
# 设置从服务器mysql的安装目录
basedir=F:/MySQL/mysql-8.0.26-winx64-s1
# 设置从服务器mysql数据库的数据的存放目录
datadir=F:/MySQL/mysql-8.0.26-winx64-s1/data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置从服务器mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置从服务器mysql客户端连接服务端时默认使用的端口
port=3308
default-character-set=utf8mb4

步骤都差不多,主要先有两台MySQL,然后配置下主从配置,查询是否同步成功(两个YES),新建库进行测试。


搞定,感谢阅览,希望能对你有帮助~
END


猜你喜欢

转载自blog.csdn.net/qq_44870331/article/details/130251438