Linux服务器安装MySQL
一、前言
MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。
二、下载

三、安装
3.1、解压安装包
tar zxvf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local
3.2、创建用户、用户组
# 创建MySQL用户组
groupadd mysql
# 添加MySQL用户并添加到MySQL用户组
useradd -r -g mysql mysql
3.3、创建文件夹
mkdir -p /data/mysql/data/
mkdir -p /data/mysql/log/
3.4、赋予MySQL权限
chown mysql:mysql -R /data/mysql/
chown mysql:mysql -R /usr/local/mysql
3.5、添加MySQL服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
#编辑/etc/init.d/mysql,basedir设置mysql所在目录;datadir设置为文件存放位置
basedir=/usr/local/mysql
datadir=/data/mysql/data
注意赋予执行权限:chmod +x /etc/init.d/mysql
3.6、编辑my_default.conf
[mysqld]
transaction-isolation = READ-COMMITTED
lower_case_table_names = 1
# 设置 3306 端口
port=3399
# 设置 mysql 的安装目录
basedir=/usr/local/mysql
# 设置 mysql 数据库的数据的存放目录
datadir=/data/mysql/data
pid-file= /data/mysql/data/mysql.pid
log_error = /data/mysql/log/mysql_error.log
general_log_file = /data/mysql/log/mysql_general.log
slow_query_log_file = /data/mysql/log/mysql_slow.log
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为 utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
#default_authentication_plugin=mysql_native_password
#lower_case_table_names=1
[mysql]
# 设置 mysql 客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置 mysql 客户端连接服务端时默认使用的端口
port=3399
default-character-set=utf8mb4
3.7、把my_default.conf文件复制值/etc文件下,命名my.cnf
#切记可能存在/etc/my.cnf文件,确保覆盖成功
rm -rf /etc/my.cnf
cp my_default.conf /etc/my.cnf
3.8、mysql文件重新赋予组、用户、执行权限
chown mysql:mysql -R /data/mysql/
chmod +x /usr/local/mysql/bin/*
chmod +x /usr/local/mysql/support-files/*
3.9、初始化数据库
#mysqld赋予权限
chmod 777 /usr/local/mysql/bin/mysqld
#初始化数据库
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/data/

3.10、启动数据库
#mysql.server赋予权限
chmod 777 /usr/local/mysql/support-files/mysql.server
#启动数据库
/usr/local/mysql/support-files/mysql.server start
service mysql start
3.11、修改初始化密码
# 切换目录
cd /usr/local/mysql/bin
# 登录命令
./mysql -u root -p 临时密码
#设置密码
SET PASSWORD = PASSWORD('password');
# 设置用户的访问密码永不过期
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
#刷新权限
FLUSH PRIVILEGES;
注意:出现1130错误代表不允许远程登录异常🤣;执行3.12操作
3.12、赋予远程访问权限
# 访问mysql库
use mysql
# 修改root用户能在任何host访问
update user set host = '%' where user = 'root';
# 刷新
FLUSH PRIVILEGES;
3.13、事务隔离级别配置
-- 查看当前隔离级别
SELECT @@global.transaction_isolation, @@session.transaction_isolation, @@transaction_isolation;
-- 设置全局隔离级别(需要SUPER权限)
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 设置当前会话隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 或者设置事务隔离级别
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
四、验证
4.1、数据库启动验证

4.2、数据库远程访问验证

五、防火墙处理
5.1、开放访问端口
# 开启端口3399
firewall-cmd --zone=public --add-port=3399/tcp --permanent
# 重启防火墙
firewall-cmd --reload
# 查看已经开放的端口
firewall-cmd --list-ports
5.2、防火墙加白名单
#限制特定服务器访问当前服务特定端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xx.xx.xx.xx" port protocol="tcp" port="3399" accept"
加完用这些命令检查:
#规则立刻生效
firewall-cmd --reload
#已添加端口查看
firewall-cmd --zone=public --list-ports
#已添加规则查看
firewall-cmd --zone=public --list-rich-rules
六、数据库整库备份脚本
#!/bin/bash
# MySQL全库备份脚本(每个库一个文件)
# 使用方法: ./backup_mysql.sh
# ========== 配置参数 ==========
# MySQL连接信息
MYSQL_HOST="localhost"
MYSQL_PORT="3399"
MYSQL_USER="root"
# 使用单引号防止特殊字符被解释
MYSQL_PASSWORD='123456'
# 或者使用更安全的做法:从配置文件读取密码
# MYSQL_PASSWORD=$(cat /etc/mysql_backup.pwd)
# 备份存储路径
BACKUP_DIR="/data/backup/mysql"
# 备份保留天数
RETAIN_DAYS=7
# 日期格式
DATE=$(date +%Y%m%d_%H%M%S)
# ========== 初始化 ==========
# 创建备份目录
mkdir -p "${BACKUP_DIR}"
# 创建日志文件
LOG_FILE="${BACKUP_DIR}/backup_${DATE}.log"
# ========== 函数定义 ==========
# 日志记录
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "${LOG_FILE}"
}
# 错误处理
error_exit() {
log "ERROR: $1"
exit 1
}
# ========== 检查依赖 ==========
# 检查MySQL客户端是否存在
command -v mysql >/dev/null 2>&1 || error_exit "mysql command not found"
command -v mysqldump >/dev/null 2>&1 || error_exit "mysqldump command not found"
# ========== 测试数据库连接 ==========
log "测试数据库连接..."
# 方法1:使用配置文件(推荐)
# 创建临时配置文件
MYSQL_CNF=$(mktemp)
cat > "${MYSQL_CNF}" << EOF
[client]
host=${MYSQL_HOST}
port=${MYSQL_PORT}
user=${MYSQL_USER}
password='${MYSQL_PASSWORD}'
EOF
# 测试连接
mysql --defaults-extra-file="${MYSQL_CNF}" -e "SELECT 1" >/dev/null 2>&1
if [ $? -ne 0 ]; then
rm -f "${MYSQL_CNF}"
error_exit "无法连接到MySQL数据库,请检查连接参数"
fi
log "数据库连接成功"
# ========== 开始备份 ==========
log "开始MySQL全库备份..."
log "备份目录: ${BACKUP_DIR}"
# 获取所有数据库列表(排除系统数据库)
DATABASES=$(mysql --defaults-extra-file="${MYSQL_CNF}" -e "SHOW DATABASES;" | grep -Ev "^(Database|information_schema|performance_schema|mysql|sys)$")
if [ -z "${DATABASES}" ]; then
rm -f "${MYSQL_CNF}"
error_exit "没有找到可备份的数据库"
fi
# 记录备份开始时间
START_TIME=$(date +%s)
# 逐个备份数据库
for DB in ${DATABASES}; do
log "正在备份数据库: ${DB}"
# 定义备份文件名
BACKUP_FILE="${BACKUP_DIR}/${DB}_${DATE}.sql"
# 执行备份
mysqldump --defaults-extra-file="${MYSQL_CNF}" \
--single-transaction \
--routines \
--triggers \
--events \
--master-data=2 \
--set-gtid-purged=OFF \
--default-character-set=utf8mb4 \
"${DB}" > "${BACKUP_FILE}" 2>> "${LOG_FILE}"
if [ $? -eq 0 ]; then
# 压缩备份文件
gzip "${BACKUP_FILE}"
log "备份成功: ${BACKUP_FILE}.gz (大小: $(du -h "${BACKUP_FILE}.gz" | cut -f1))"
else
log "备份失败: ${DB}"
rm -f "${BACKUP_FILE}"
fi
done
# 删除临时配置文件
rm -f "${MYSQL_CNF}"
# 记录备份结束时间
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
log "MySQL全库备份完成,耗时: ${DURATION} 秒"
# 清理过期备份文件
find "${BACKUP_DIR}" -name "*.sql.gz" -mtime +${RETAIN_DAYS} -delete
log "已清理 ${RETAIN_DAYS} 天前的备份文件"
浙公网安备 33010602011771号