大数跨境
0
0

Centos7.9安装Mysql8并配置主从复制

Centos7.9安装Mysql8并配置主从复制 SRE云原生
2025-12-01
0


一、环境准备

机器名称
机器IP
数据库
数据库用户名
数据库密码
mysql_master
10.132.47.61
mysql 8.0
root
Shyshy521521!
mysql_slave1
10.132.47.62
mysql 8.0
root
Shyshy521521!
mysql_slave2
10.132.47.63
mysql 8.0
root
Shyshy521521!
查看centos7中是否有`MariaDB
rpm -qa | grep mariadb

如果有MariaDB,需要将 步骤1 中查询到的mairadb全部卸载

rpm -e --nodeps 软件名

查看本机是否已经安装过MySQL

rpm -qa | grep -i mysql

将步骤3中查询到的mysql安装包全部卸载

rpm -e --nodeps 软件名

查找mysql文件,并将其删除

find / -name mysqlwhereis mysql

将find命令和whereis命令查询到的mysql文件全部删除

rm -rf 查询到的mysql路径

删除mysql配置文件

rm /etc/my.cnf

确认是否全部删除mysql

rpm -qa | grep -i mysql


1.配置主机名称
# 在10.132.47.61上执行hostnamectl set-hostname mysql_master# 在10.132.47.62上执行hostnamectl set-hostname mysql_slave1# 在10.132.47.63上执行hostnamectl set-hostname mysql_slave2
2. 配置 hosts 文件
cat >> /etc/hosts << EOF10.132.47.60 mysql_manager10.132.47.61 mysql_master10.132.47.62 mysql_slave110.132.47.63 mysql_slave2EOF
3. 关闭防火墙和 SELinux
# 关闭防火墙systemctl stop firewalldsystemctl disable firewalld
# 关闭SELinuxsetenforce 0sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
4. 配置 SSH 免密码登录

在 mysql_manager 节点执行:

# 生成密钥对ssh-keygen -t rsa -P "" -~/.ssh/id_rsa
# 分发公钥到所有节点ssh-copy-id root@mysql_managerssh-copy-id root@mysql_masterssh-copy-id root@mysql_slave1ssh-copy-id root@mysql_slave2

二、安装 MySQL 8.0(所有数据库节点)

  1. 下载并安装 MySQL 源
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpmrpm -ivh mysql80-community-release-el7-3.noarch.rpm

导入 MySQL GPG 密钥

# 导入官方GPG密钥rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

强制安装 MySQL(跳过 GPG 验证,确保成功)

# 用--nogpgcheck参数跳过签名验证,直接安装yum install -y mysql-community-server --nogpgcheck

启动 MySQL 并设置开机自启

systemctl start mysqld && systemctl enable mysqld
  1. 获取初始密码并修改
#获取初始密码grep 'temporary password' /var/log/mysqld.log# 用初始密码登录(替换为实际密码)mysql -u root -p
# 在MySQL命令行执行ALTER USER 'root'@'localhost' IDENTIFIED BY 'Shyshy521521!';FLUSH PRIVILEGES;
#配置root远程访问use mysql;update user set host='%' where user='root';FLUSH PRIVILEGES;exit;

三、配置 MySQL 主从复制

1. 配置主库(mysql_master)
# 编辑配置文件vim /etc/my.cnf
# 添加以下内容
[mysqld]server_id = 1#复制集群中的各节点的id均必须唯一skip_name_resolve   #关闭名称解析gtid-mode = on #启用gtid类型enforce-gtid-consistency = true #强制GTID的一致性log-slave-updates = 1#slave更新是否记入日志log-bin = mysql-bin #开启二进制日志relay-log = relay-log#开启中继日志

重启 MySQL:

systemctl restart mysqld

创建复制用户:

mysql -u root -pShyshy521521! -e "CREATE USER 'repl'@'%' IDENTIFIED BY 'Shyshy521521!'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;"

-- 切换到系统库USE mysql;
-- 查看当前repl用户的认证插件SELECT user, host, plugin FROM user WHERE user = 'repl';
-- 修改为mysql_native_password(不强制要求安全连接)ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Shyshy521521!';
#鉴于mysql8.0安全措施严重,所以配置为每个IP#主库CREATE USER 'repl'@'10.132.47.61' IDENTIFIED WITH mysql_native_password BY 'Shyshy521521!';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.132.47.61';#slave1CREATE USER 'repl'@'10.132.47.62' IDENTIFIED WITH mysql_native_password BY 'Shyshy521521!';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.132.47.62';#slave2CREATE USER 'repl'@'10.132.47.63' IDENTIFIED WITH mysql_native_password BY 'Shyshy521521!';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.132.47.63';
-- 刷新权限FLUSH PRIVILEGES;
-- 退出主库exit;

查看主库状态

mysql -u root -pShyshy521521! -e "show master status\G"
show master status;

记录 File 和 Position 的值,用于从库配置



2. 配置从库 1(mysql_slave1)
# 编辑配置文件vim /etc/my.cnf
# 添加以下内容[mysqld]server_id = 2#复制集群中的各节点的id均必须唯一skip_name_resolve   #关闭名称解析gtid-mode = on #启用gtid类型enforce-gtid-consistency = true #强制GTID的一致性log-slave-updates = 1#slave更新是否记入日志log-bin = mysql-bin #开启二进制日志relay-log = relay-log#开启中继日志read_only = ON #启用只读属性relay_log_purge = 0#是否自动清空不再需要中继日志

重启 MySQL 并配置主从:

systemctl restart mysqld
# 配置主从复制mysql -u root -pShyshy521521!
#设置主库连接信息(确保参数正确)CHANGE MASTER TO   MASTER_HOST='10.132.47.61',  -- 主库IP  MASTER_USER='repl',          -- 复制用户  MASTER_PASSWORD='Shyshy521521!',  -- 复制用户密码  MASTER_LOG_FILE='mysql-bin.000001',  -- 主库日志文件(需与主库show master status一致)  MASTER_LOG_POS=849;          -- 主库日志位置(需与主库show master status一致)
-- 启动从库复制START SLAVE;# 查看从库状态mysql -u root -pShyshy521521!! -e "show slave status\G"

-----------------------------------------------------------------------------------#主库强制要求安全连接的情况下配置
-- 先停止从库STOP SLAVE;
-- 重新配置主库连接,启用SSLCHANGE MASTER TO   MASTER_HOST='10.132.47.61',  MASTER_USER='repl',  MASTER_PASSWORD='Shyshy521521!',  MASTER_LOG_FILE='mysql-bin.000001',  MASTER_LOG_POS=849,  MASTER_SSL=1;  -- 启用SSL连接
-- 启动从库START SLAVE;
-- 查看状态SHOW SLAVE STATUS\G
3. 配置从库 2(mysql_slave2)
# 编辑配置文件vim /etc/my.cnf
# 添加以下内容[mysqld]server_id = 3#复制集群中的各节点的id均必须唯一skip_name_resolve   #关闭名称解析gtid-mode = on #启用gtid类型enforce-gtid-consistency = true #强制GTID的一致性log-slave-updates = 1#slave更新是否记入日志log-bin = mysql-bin #开启二进制日志relay-log = relay-log#开启中继日志read_only = ON #启用只读属性relay_log_purge = 0#是否自动清空不再需要中继日志

重启 MySQL 并配置主从:

systemctl restart mysqld
# 配置主从复制mysql -u root -pShyshy521521!
#设置主库连接信息(确保参数正确)CHANGE MASTER TO   MASTER_HOST='10.132.47.61',  -- 主库IP  MASTER_USER='repl',          -- 复制用户  MASTER_PASSWORD='Shyshy521521!',  -- 复制用户密码  MASTER_LOG_FILE='mysql-bin.000001',  -- 主库日志文件(需与主库show master status一致)  MASTER_LOG_POS=849;          -- 主库日志位置(需与主库show master status一致)

测试

#主库-- 1. 创建测试数据库CREATE DATABASE IF NOT EXISTS test_repl;
-- 2. 切换到测试库USE test_repl;
-- 3. 创建测试表CREATE TABLE IF NOT EXISTS user (  id INT PRIMARY KEY AUTO_INCREMENT,  name VARCHAR(50),  age INT);
-- 4. 插入测试数据INSERT INTO user (name, age) VALUES ('测试同步1'20), ('测试同步2'25);
-- 5. 查看主库数据(确认插入成功)SELECT * FROM user;
#从库-- 1. 切换到同步过来的测试库USE test_repl;
-- 2. 查看表和数据(若能看到主库插入的数据,说明同步成功)SELECT * FROM user;

【声明】内容源于网络
0
0
SRE云原生
专注于分享运维、Devops、网络安全以及SRE云原生相关知识,内容包括但不限于自动化运维、云架构、云监控、云安全、AI、AWS以及攻防渗透等。内容多以原创为主,旨在于编写高质量文章。
内容 35
粉丝 0
SRE云原生 专注于分享运维、Devops、网络安全以及SRE云原生相关知识,内容包括但不限于自动化运维、云架构、云监控、云安全、AI、AWS以及攻防渗透等。内容多以原创为主,旨在于编写高质量文章。
总阅读22
粉丝0
内容35