一、环境需求
1. linux:centos7.x
2. mysql:mysql5.7
说明:尽量保证服务器是第一次进行mysql的安装;以保证环境纯净,能使得安装mysql一次成功
二、部署mysql
1. 添加MySQL5.7官方源(可以根据需求对官方源版本进行替换)
sudo rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
2. 清理缓存
sudo yum clean all
3. 查看可安装的 MySQL 版本
sudo yum repolist enabled | grep mysql
4. 安装 MySQL 服务器
sudo yum install mysql-community-server
5. 安装MySQL服务
sudo yum install -y mysql-server
6. 验证mysql版本信息
mysql -V
7. 启动MySQL服务并设置开机自启
sudo systemctl start mysqld
sudo systemctl enable mysqld
8. 获取初始root密码(两种方式均可)
sudo grep 'temporary password' /var/log/mysqld.log
echo $(PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log); PASSWORD=${PASSWORD##* }; echo $PASSWORD)
9. 安全配置(修改密码、删除匿名用户等),启动mysql安全安装向导
sudo mysql_secure_installation
9.1 输入root用户密码
说明:输入密码时界面不会显示密码的输入过程,请您确保输入的密码正确。
9.2 设置mysql的root新密码
说明:提示root密码已过期,需要设置新的root用户密码,需要输入两次新密码。密码策略要求密码至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符,并且密码总长度至少为8个字符。
9.3 修改root密码后,输入n,拒绝再次修改密码
9.4 输入y,移除匿名用户
说明:移除匿名用户可以防止未经授权的用户在没有提供有效凭证的情况下访问个人部署的mysql服务器
9.5 输入y,禁止mysql的root用户从远程登录
说明:如果有特定需求允许root用户远程访问,可以按Y以外任意键以允许远程root登录
9.6 输入y,移除mysql自带的test数据库
9.7 输入y,重新加载权限表,使之前所有修改生效
参考:在Linux实例中安装MySQL数据库_云服务器 ECS(ECS)-阿里云帮助中心
三、主从搭建
1. master
1.1 修改配置文件 /etc/my.cnf
[mysqld] server-id = 1 # 唯一ID(主从不能重复) log-bin = mysql-bin # 开启二进制日志 binlog_format = row # 推荐使用行模式 expire_logs_days = 7 # 日志保留天数 binlog_do_db = mydb # 指定同步的数据库(可选,不配置则同步所有库)
1.2 重启mysql生效配置
sudo systemctl restart mysld
1.3 创建主从复制专用用户
# 登录 MySQL mysql -u root -p # 创建复制用户 CREATE USER '${username}'@'${ip}或者%' IDENTIFIED BY '${password}'; GRANT REPLICATION SLAVE ON *.* TO '${ip}或者%'; FLUSH PRIVILEGES;
1.4 查看mysql状态
show master status;
2. slave
2.1 修改配置文件 /etc/my.cnf
[mysqld] server-id = 2 # 唯一ID(必须与主库不同) relay-log = mysql-relay-bin # 开启中继日志 read_only = 1 # 从库只读(确保数据安全)
2.2 重启mysql生效配置
sudo systemctl restart mysld
2.3 配置主从复制链路
# 登录 MySQL mysql -u root -p # 配置主库信息 CHANGE MASTER TO MASTER_HOST = '172.16.10.101', MASTER_USER = 'repl', MASTER_PASSWORD = 'Repl_P@ssw0rd!', MASTER_LOG_FILE = 'mysql-bin.000002', -- 替换为主库记录的 File,可在 master 通过 show master status; 查看 MASTER_LOG_POS = 154; -- 替换为主库记录的 Position,也是在 master 通过 show master status; 查看 # 启动复制 START SLAVE;
2.4 检查复制状态
SHOW SLAVE STATUS\G # 确认以下两项为 "Yes" -- Slave_IO_Running: Yes -- Slave_SQL_Running: Yes -- 若为 "No",检查 Last_IO_Error 或 Last_SQL_Error 排查问题注意:确保主从的3306端口是互通的
3. 验证主从复制
3.1 在 master 中创建测试数据
CREATE DATABASE mydb; USE mydb; CREATE TABLE test (id INT PRIMARY KEY, name VARCHAR(20)); INSERT INTO test VALUES (1, 'Master Data');
3.2 在slave 中检查数据
USE mydb; SELECT * FROM test; -- 应看到主库插入的数据
四、Q&A
1. 若是在安装mysql时,出现了下面截图的报错,表示系统缺少验证mysql软件包所需的GPG密钥(用于验证软件包的真实性和完整行)。当使用官方mysql仓库安装时,必须导入密钥才能继续
1.1处理:
a. 手动导入mysql的GPG密钥
# 下载并导入 MySQL 5.7 的 GPG 密钥 sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 # 或使用官方推荐的最新密钥(如果上述失效) sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql
b. 清理yum缓存并重试安装
# 清理旧缓存 sudo yum clean all # 重新生成缓存 sudo yum makecache # 再次尝试安装 MySQL sudo yum install mysql-community-server
2. 若是在slave中执行 use ${database}; 时出现下面截图的提示,是表示mysql客户端的自动补全功能(auto-rehash)在读取表信息,并非实际错误。一般等下就会恢复,重新执行即可。
2.1 现象:客户端在连接时尝试加载数据库的表结构信息,以便提供命令行自动补全功能。
2.2 影响:若数据库较大或表较多,可能导致连接速度变慢,但不会影响 SQL 执行。
2.3 解决方案:可通过禁用自动补全功能消除提示,或确认从库数据同步正常。即在连接 MySQL 时添加 -A
或 --no-auto-rehash
参数,禁用自动补全: mysql -u root -p -A