一、环境准备
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
查看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.配置主机名称
hostnamectl set-hostname mysql_masterhostnamectl set-hostname mysql_slave1hostnamectl 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 "" -f ~/.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(所有数据库节点)
-
下载并安装 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
-
获取初始密码并修改
#获取初始密码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 TOMASTER_HOST='10.132.47.61', -- 主库IPMASTER_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 TOMASTER_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 TOMASTER_HOST='10.132.47.61', -- 主库IPMASTER_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;

