Mac 快速搭建 MySQL8.0 GTID双主同步

2024年 4月 29日 123.7k 0

下载安装包

打开 MySQL 官网地址:https://dev.mysql.com/downloads/mysql/

安装

解压

tar -xzvf mysql-8.0.36-macos14-arm64.tar.gz

准备配置文件,如下是master的配置文件,slave的配置调整server-id 和相关路径即可。

[client]
default-character-set=utf8mb4
#password = your_password
port = 3306
#修改的socket文件的位置,默认是走的/tmp下的mysql.sock会有冲突
#这是报错 Another process with pid 77346 is using unix socket file.
#客户端也需要这个和服务端的一致
socket = /your-path/mysql.sock
[mysqld]
#开启gtid
enforce-gtid-consistency=true
gtid-mode=on
sync-binlog = 1
log-error = mysql.err
event_scheduler=ON
port = 3306
mysqlx_port = 33060
bind-address=127.0.0.1
#修改的socket文件的位置,默认是走的/tmp下的mysql.sock会有冲突
socket=/your-path/mysql.sock
mysqlx_socket=/your-path/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
character-set-server=utf8mb4
init_connect='SET NAMES utf8mb4'

#修改mysql的主目录
basedir=/your-path/
#添加data文件的目录,存储各种数据和日志
datadir=/your-path/data

log-error = mysql.err
log-bin=mysql-bin
binlog_format=row
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
lower_case_table_names=1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
default-character-set=utf8mb4

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

[mysqlhotcopy]
interactive-timeout

初始化阶段创建空密码的root@localhost账号

./mysqld --defaults-file=/your-path/my.cnf --initialize-insecure

初始化阶段创建带随机密码的root@localhost账号

./mysqld --defaults-file=/your-path/my.cnf --initialize

启动MySQL服务,并验证服务可用性情况。

./mysqld_safe --defaults-file=--defaults-file=/-path/my.cnf &
ps -ef | grep mysql

mysql -h127.0.0.1 -P3306 -uroot -p

配置双主同步

分别在主从两个库创建账号,并验证正常访问

create user 'repl'@'%' identified by 'repl';
grant replication slave on *.* to 'repl'@'%';
flush privileges;

# 查看主库的状态
show master status;

mysql -h 127.0.0.1 -urepl -P3306 -prepl
mysql -h 127.0.0.1 -urepl -P3307 -prepl

在两个数据库分别创建主从同步:
使用GTID方式创建同步:

change master to master_host='127.0.0.1',master_port=3306,master_user='repl',master_password='repl', master_auto_position=1;

使用Binlog位点的方式创建

#在上游主库获取binlog位置
show master status;

#在下游从库建立同步关系
change master to master_host='127.0.0.1',master_port=3306,master_user='repl',master_password='repl', master_log_file='mysql-bin.000003',master_log_pos=857;

start slave;

show salve status;

额外补充内容:

# 清理relay log同步信息
reset slave;

# 清理slave同步关系,包括账号访问等信息也会清理
reset slave all;

在主库重置binlog文件:

reset masetr;

caching_sha2_password 报错排查

Last_IO_Error: Error connecting to source ‘repl@127.0.0.1:3306’. This was attempt 5/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection.

mysql -u repl -p -h 127.0.0.1 -P3307 --get-server-public-key

原因:
在从库连接主库的时候使用的是不被 caching_sha2_password认可的RSA公钥,所以主库MySQL拒绝了数据库连接的请求,从而,从库报错’caching_sha2_password’ reported error:Authentication require secure connection。

解决:
官网给出的解决方案如下:
要从服务器请求RSA公钥,需要指定选项 --get-server-public-key 。

从服务器请求基于RSA密钥对的密码交换所需的公共密钥。此选项适用于使用caching_sha2_password身份验证插件进行身份验证的客户端 。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果未使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。

或者,如果客户端的文件包含服务器所需的RSA公钥的本地副本,则可以使用—server-public-key-path选项指定文件 。

具体为:
方案1:
使用复制用户请求服务器公钥:

mysql -u repl -p -h 127.0.0.1 -P3307 --get-server-public-key

在这种情况下,服务器将RSA公钥发送给客户端,后者使用它来加密密码并将结果返回给服务器。插件使用服务器端的RSA私钥解密密码,并根据密码是否正确来接受或拒绝连接。
重新在从库配置change masrer to并且start slave,复制可以正常启动。

方案2:
使用复制用户请求服务器公钥:

mysql -u repl -p123 -h 118.31.127.96 -P3307 --server-public-key-path=/mysqldata/my3308/data/public_key1.pem

重新在从库配置change masrer to并且start slave,复制可以正常启动。

方案3:
修改repl用户,使其使用别的秘密加密方式,不使用插件caching_sha2_password。

CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'XXXX';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论