环境 CentOS 7.9
mysql版本 mysql-8.0.33-el7-x86_64
mysql下载地址
https://downloads.mysql.com/archives/community/
在下载前先创建一个mysql用户,为什么要创建MySQL用户?因为解压出来的mysql文件没有任何的属组,
以及为了避免在配置、启动时MySQL不能读取某些文件,所以建议使用mysql用户来运行mysql
adduser mysql
passwd mysql # 接下来输入两次密码
切换用户
上传至服务器解压,
su mysql
tar -xzvf mysql-8.0.33-el7-x86_64.tar.gz
cp -r mysql-8.0.33-el7-x86_64 ./mysql_masterA
cp -r mysql-8.0.33-el7-x86_64 ./mysql_masterB
cp -r mysql-8.0.33-el7-x86_64 ./mysql_slaveA
cp -r mysql-8.0.33-el7-x86_64 ./mysql_slaveB
cp -r mysql-8.0.33-el7-x86_64 ./mysql_slaveC
cp -r mysql-8.0.33-el7-x86_64 ./mysql_slaveD
切换到root用户,更改两个mysql的数组为mysql用户,然后再切换回mysql用户
exit
chown -R mysql:mysql /usr/local/mysql_masterA/ /usr/local/mysql_masterB/
chown -R mysql:mysql /usr/local/mysql_slaveA/ /usr/local/mysql_slaveB/
chown -R mysql:mysql /usr/local/mysql_slaveC/ /usr/local/mysql_slaveD/
su mysql
自定义配置my.cnf
[mysqld]
### 端口号
port=3306
### 安装目录
basedir=/usr/local/mysql_masterA
### 数据存放路径
datadir=/usr/local/mysql_masterA/data/
### 会话文件目录
socket=/usr/local/mysql_masterA/mysql.sock
# 允许连接失败的最大次数
max_connect_errors=10
# 服务端的字符集编码
character-set-server=utf8
# 默认存储引擎
default-storage-engine=INNODB
default_authentication_plugin=mysql_native_password
# 主从复制-主机1配置
# 主服务器唯一ID
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置logbin格式
binlog_format=STATEMENT
# 写入操作更新二进制日志文件
log-slave-updates
# 自增长字段起始值,默认值为1,取值范围:1 ~ 65535
auto-increment-increment=1
# 自增长字段递增量,取值范围:1 ~ 65535
auto-increment-offset=1
# 默认用户
#user=mysql
# 开启慢查询
slow_query_log=on
# 慢查询日志文件目录
slow_query_log_file=/usr/local/mysql_masterA/slow-query.log
[client]
### 连接服务端使用的端口号
port=3306
### 会话文件
socket=/usr/local/mysql_masterA/mysql.sock
# 默认字符集编码
default-character-set=utf8
[mysqld]
### 端口号
port=3307
### 安装目录
basedir=/usr/local/mysql_slaveA
### 数据存放路径
datadir=/usr/local/mysql_slaveA/data/
### 会话文件目录
socket=/usr/local/mysql_slaveA/mysql.sock
# 允许连接失败的最大次数
max_connect_errors=10
# 服务端的字符集编码
character-set-server=utf8
# 默认存储引擎
default-storage-engine=INNODB
default_authentication_plugin=mysql_native_password
lower-case-table-names=1
# 主从复制-主机1配置
# 主服务器唯一ID
server-id=2
# 只读
read_only=1
# 启用二进制日志
relay-log=mysql-relay
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置logbin格式
binlog_format=STATEMENT
# 写入操作更新二进制日志文件
log-slave-updates
# 自增长字段起始值,默认值为1,取值范围:1 ~ 65535
auto-increment-increment=1
# 自增长字段递增量,取值范围:1 ~ 65535
auto-increment-offset=1
# 默认用户
user=mysql
# 开启慢查询
slow_query_log=on
# 慢查询日志文件目录
slow_query_log_file=/usr/local/mysql_slaveA/slow-query.log
[client]
### 连接服务端使用的端口号
port=3307
### 会话文件
socket=/usr/local/mysql_slaveA/mysql.sock
# 默认字符集编码
default-character-set=utf8
修改文件中的默认配置信息
vim ./support-files/mysql.server
将文件中的所有有关basedir和datadir的配置全部修改为当前的路径,如下图
以及修改该文件中加载的MySQL配置文件路径,修改为刚才创建的my.cnf文件,如下图,修改完成后,保存退出。
同样也需要修改support-files下的另一个文件
修改support-files文件夹下的mysqld_multi.server文件
vim ./support-files/mysqld_multi.server
#还是修改basedir和datadir两项属性,如下图所示
初始化安装
切换到mysql_01的根目录
cd /home/mysql/mysql_01/
# 初始化安装 --defaults-file表示指定初始化的配置文件 --console表示将初始化信息打印在控制台
./bin/mysqld --defaults-file=/usr/local/mysql_masterA/my.cnf --initialize --console --user=mysql
# 初始化成功后,会在控制台中打印出初始化密码,大致格式如下
root@localhost: fa356fgss,
启动服务
# 后台启动当前mysql_01的mysql服务,还是需要去指定配置文件,因为在配置文件中我们设置了一个socket参数,只有按照这个配置文件去启动,才会按照socket配置的路径去生成,否则会自动生成在/tmp/mysql.sock,如果mysql_02也是这么生成,则会形成覆盖,在连接时造成只能连接一个服务,甚至报错。
./bin/mysqld_safe --defaults-file=./my.cnf &
# 使用命令查看mysql服务是否启动,如下图
netstat -nultp|grep 10085
Lost -i :port
连接数据库与修改密码
# 通过上面可以看到mysql服务已经启动,那么就可以连接MySQL了
./bin/mysql --socket=./mysql.sock -uroot -p # 输入初始密码
# 修改MySQL登录密码,这儿我的修改为 root,注意末尾的结束符分号
alter user root@localhost identified by "root";
# 关闭mysql服务
./bin/mysqladmin -uroot -p -S ./mysql.sock shutdown
#修改root用户可以从任意ip登录
use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# 在主库创建密码为Admin#2020的用户slave
create user 'slave'@'%' identified with mysql_native_password by 'Admin#2020';
grant replication slave on *.* to 'slave'@'%';
flush privileges;
查看master状态,并记录file和position的值
show master status;
登录从库
change master to master_host='120.48.23.239',master_port=3306,master_user='slave',master_password='mysql_slaveA',master_log_file='mysql-bin.000002',master_log_pos=6075;
# 开始同步
start slave;
查看slave同步状态
# Slave_IO_Running: Yes,Slave_SQL_Running: Yes,两个yes则同步成功,否则查看相应的报错
show slave status\G
如果同步出错,则停止同步,重置后再次开启同步:
stop slave;
reset slave;
start slave;
参考 博客
https://blog.csdn.net/ct_666/article/details/111842000
centos7搭建标准通用MySQL8.0主从复制(一主一从)_centos-7如何搭建mysql8.0主从复制-CSDN博客
https://www.cnblogs.com/cao-lei/p/13603043.html
Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从) - C3Stones - 博客园 (cnblogs.com)
https://www.cnblogs.com/fqgump/p/12957145.html
【原创】CentOS 7搭建多实例MySQL8(想要几个搞几个) - FqGump_Yi - 博客园 (cnblogs.com)
https://blog.csdn.net/MR_Wxm/article/details/107524387
mysql8 主从复制 双主模式_centos7搭建mysql8集群双主双从-CSDN博客
https://www.jianshu.com/p/50b9446d77f4
MySQL 8 双主设置 - 简书 (jianshu.com)