下载安装包
打开 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'@'%';