一、前置检查
# 检查并卸载冲突的mariadb(与MySQL冲突)
rpm -qa | grep mariadb
# 替换为实际查到的包名
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
# 查看系统位数(64位/32位)
getconf LONG_BIT
# 查看glibc版本(需匹配安装包)
getconf GNU_LIBC_VERSION
# 查看架构(x86_64=amd64)
uname -m
二、下载 MySQL 安装包
wget -c https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.42-linux-glibc2.28-x86_64.tar.xz -P /opt/data
三、解压并创建专用用户
解压安装包并创建 MySQL 专用系统用户
# 进入安装目录
cd /opt/data
# 解压
tar -Jxvf mysql-8.2.0-linux-glibc2.17-x86_64.tar.xz
# 重命名
mv mysql-8.2.0-linux-glibc2.17-x86_64 mysql8
# 创建mysql用户组和系统用户(-r表示不可登录系统)
groupadd mysql
useradd -r -g mysql mysql
# 创建数据存储目录
mkdir -p mysql8/data
四、配置 MySQL 核心参数
创建配置文件并指定基础路径、端口、字符集等核心参数
# 编辑配置文件
vim /opt/data/mysql8/conf/my.cnf
[client]
socket=/opt/data/mysql8/data/mysql.sock # 客户端连接套接字
[mysqld]
bind-address=0.0.0.0 # 允许所有IP访问
port=3306 # 监听端口
user=mysql # 运行用户
basedir=/opt/data/mysql8 # 安装根目录
datadir=/opt/data/mysql8/data # 数据存储目录
socket=/opt/data/mysql8/data/mysql.sock
log-error=/opt/data/mysql8/data/mysql.err # 错误日志
pid-file=/opt/data/mysql8/data/mysql.pid # 进程ID文件
max_connections=10000 # 最大连接数
max_user_connections=2000 # 单用户最大连接数
wait_timeout=200 # 连接超时时间
character_set_server=utf8mb4 # 默认字符集(支持emoji)
symbolic-links=0 # 禁用符号链接
explicit_defaults_for_timestamp=true
# 递归设置目录所属用户和用户组
chown -R mysql:mysql mysql8
五、初始化并启动 MySQL
初始化数据库(生成临时密码),安装依赖后启动服务
出现如下错误需安装libaio
# 安装依赖(初始化缺失libaio时执行)
yum -y install libaio
# 初始化数据库(指定配置文件和用户)
/opt/data/mysql8/bin/mysqld --defaults-file=/opt/data/mysql8/conf/my.cnf --basedir=/opt/data/mysql8 --datadir=/opt/data/mysql8/data --user=mysql --initialize
# 查看初始临时密码(关键!用于首次登录)
cat /opt/data/mysql8/data/mysql.err
# 后台启动MySQL服务
/opt/data/mysql8/bin/mysqld --defaults-file=/opt/data/mysql8/conf/my.cnf --user=mysql --daemonize
六、首次登录并修改密码
使用临时密码登录,重置密码并开放远程访问(MySQL8 + 需指定加密方式):
# 登录MySQL(输入临时密码)
/opt/data/mysql8/bin/mysql --defaults-file=/opt/data/mysql8/conf/my.cnf -u root -p
-- 1. 查看用户信息
select user, host, plugin from mysql.user;
-- 2. 修改root密码(指定mysql_native_password加密,兼容旧客户端)mysql8+密码使用sha2加密,需指定算法
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
-- 3. 允许root从任意IP访问(%表示所有IP,生产环境建议指定具体IP)
update mysql.user set host = '%' where user = 'root';
-- 4. 刷新权限生效
FLUSH PRIVILEGES;
七、配置 MySQL 主从复制(单机模拟)
在同一台机器创建主库(8001 端口)和从库(8002 端口),实现数据同步
1. 创建主从库目录
# 主库数据目录
mkdir -p /opt/data/mysql8/data_master
# 从库数据目录
mkdir -p /opt/data/mysql8/data_slave
2. 配置主库(my_master.cnf)
vim /opt/data/mysql8/conf/my_master.cnf
写入如下内容
[client]
socket=/opt/data/mysql8/data_master/mysql.sock
[mysqld]
server-id=1 # 主库唯一ID(不可重复)
log-bin=mysql-bin # 开启二进制日志(主从核心)
bind-address=0.0.0.0
port=8001
user=mysql
basedir=/opt/data/mysql8
datadir=/opt/data/mysql8/data_master
socket=/opt/data/mysql8/data_master/mysql.sock
log-error=/opt/data/mysql8/data_master/mysql.err
pid-file=/opt/data/mysql8/data_master/mysql.pid
max_connections=10000
max_user_connections=2000
wait_timeout=200
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
# binlog-do-db = test # 可选:仅同步主库中的test库
# binlog-ignore-db = test # 可选:忽略主库中的test库同步
3. 配置从库(my_slave.cnf)
vim /opt/data/mysql8/conf/my_slave.cnf
[client]
socket=/opt/data/mysql8/data_slave/mysql.sock
[mysqld]
server-id=2 # 从库唯一ID(需与主库不同)
log-bin=mysql-bin
read_only=1 # 从库只读(super用户除外)
bind-address=0.0.0.0
port=8002
user=mysql
basedir=/opt/data/mysql8
datadir=/opt/data/mysql8/data_slave
socket=/opt/data/mysql8/data_slave/mysql.sock
log-error=/opt/data/mysql8/data_slave/mysql.err
pid-file=/opt/data/mysql8/data_slave/mysql.pid
max_connections=10000
max_user_connections=2000
wait_timeout=200
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
# replicate-do-db = test # 可选:仅复制主库中的test库
# replicate-ignore-db = test# 可选:忽略主库中的test库复制
4. 初始化并启动主从库
# 初始化主库
/opt/data/mysql8/bin/mysqld --defaults-file=/opt/data/mysql8/conf/my_master.cnf --basedir=/opt/data/mysql8 --datadir=/opt/data/mysql8/data_master --user=mysql --initialize
# 初始化从库
/opt/data/mysql8/bin/mysqld --defaults-file=/opt/data/mysql8/conf/my_slave.cnf --basedir=/opt/data/mysql8 --datadir=/opt/data/mysql8/data_slave --user=mysql --initialize
# 查看主/从库临时密码
cat /opt/data/mysql8/data_master/mysql.err # 主库示例:QzPwayyQe5(p
cat /opt/data/mysql8/data_slave/mysql.err # 从库示例:+&9+6d62Uiw-
# 启动主库
/opt/data/mysql8/bin/mysqld --defaults-file=/opt/data/mysql8/conf/my_master.cnf --user=mysql --daemonize
# 启动从库
/opt/data/mysql8/bin/mysqld --defaults-file=/opt/data/mysql8/conf/my_slave.cnf --user=mysql --daemonize
5. 配置主从同步权限
# 登录主库(输入主库临时密码)
/opt/data/mysql8/bin/mysql --defaults-file=/opt/data/mysql8/conf/my_master.cnf -u root -p
-- 修改主库root密码并开放远程访问
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
update mysql.user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
-- 创建从库同步专用用户
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;
-- 查看主库二进制日志信息(记录file和pos,用于从库配置)
show master status\G;
6. 配置从库同步
# 登录从库(输入从库临时密码)
/opt/data/mysql8/bin/mysql --defaults-file=/opt/data/mysql8/conf/my_slave.cnf -u root -p
-- 修改从库root密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
update mysql.user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
-- 指定主库
change master to master_host='116.198.230.30',master_port=8001,master_user='slave',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=3376;
-- 启动从库同步
start slave;
-- 查看同步状态(Slave_IO_Running和Slave_SQL_Running均为Yes则成功)
show slave status\G;
-- 创建从库只读用户
CREATE USER 'slave_read'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT SELECT ON *.* TO 'slave_read'@'%';
FLUSH PRIVILEGES;
7. 验证主从同步
-- 登录主库创建测试库
create database test;
-- 登录从库查看是否同步
show databases;