Linux服务器安装MySQL

一、前言

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

二、下载

a0179ffd-716b-48dd-aee5-d0cc30f4bab1.png

三、安装

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/

18ee7181-4f81-4253-9423-eaf562d1a39d.png

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、数据库启动验证

277589a0-8897-4ffb-8954-7c3e7ce7b7d8.png

4.2、数据库远程访问验证

9aa20e7c-c0e4-45ab-91a9-c30b49b836e2.png

五、防火墙处理

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} 天前的备份文件"

posted on 2026-08-10 15:41  爱河  阅读(2)  评论(0)    收藏  举报

导航