mysql8.0版本部署+日志清理+rsync备份策略

mysql安装:https://blog.csdn.net/qq_39399966/article/details/120205461

系统:centos7.9

数据库版本:mysql8.0.28

1.卸载旧的mysql,保证环境纯净

rpm -qa | grep mariadb

mariadb-5....

rpm -e --nodeps 软件

rpm -e --nodeps mariadb-5...

rpm -qa | grep -i mysql #查看是否安装过mysql

#查找mysql文件,并将其删除

find / -name mysql

whereis mysql

rm -rf 查询到的mysql路径

rm /etc/my.cnf

rpm -qa | grep -i mysql

#uname -m

arch

x86_64 #我的是x86

#拉取包,如果你是arch,下载https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28-1.el7.aarch64.rpm-bundle.tar

wget https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar

#安装依赖

yum install openssl-devel perl-Test-Simple perl-JSON.noarch perl.x86_64 perl-devel.x86_64 autoconf numactl openssl-devel.x86_64 openssl.x86_64 -y

#rpm安装顺序

#1梯队

rpm -ivh mysql-community-common-8.0.26-1.el7.x86_64.rpm --nodeps

rpm -ivh mysql-community-libs-8.0.26-1.el7.x86_64.rpm --nodeps

rpm -ivh mysql-community-client-8.0.26-1.el7.x86_64.rpm --nodeps

rpm -ivh mysql-community-server-8.0.26-1.el7.x86_64.rpm --nodeps

#2梯队

rpm -ivh mysql-community-libs-compat-8.0.26-1.el7.x86_64.rpm --nodeps

rpm -ivh mysql-community-embedded-compat-8.0.26-1.el7.x86_64.rpm --nodeps

rpm -ivh mysql-community-devel-8.0.26-1.el7.x86_64.rpm --nodeps

rpm -ivh mysql-community-test-8.0.26-1.el7.x86_64.rpm --nodeps

#数据库初始化

mysqld --initialize --console

#目录授权

chown -R mysql:mysql /var/lib/mysql/

#启动

systemctl start mysqld && systemctl enable --now mysqld && systemctl status mysqld

#查看密码

cat /var/log/mysqld.log | grep password

#登录

mysql -u root -p

#改密码

alter USER 'root'@'localhost' IDENTIFIED BY 'W!@f2rfsdf;';

#登录授权

use mysql;

select host, user, authentication_string, plugin from user;

update user set host = "%" where user='root';

flush privileges;

#密码验证方式更改

use mysql;

alter USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'heihei3431@:';

flush privileges;

#创建用户并授权

CREATE USER 'xixi'@'%' IDENTIFIED BY 'heihei@13のqednasdo11';

GRANT ALL PRIVILEGES ON *.* TO 'xixi'@'%' WITH GRANT OPTION;

ALTER USER 'xixi'@'%' IDENTIFIED WITH mysql_native_password BY 'heihei@13のqednasdo11';

FLUSH PRIVILEGES;

UPDATE mysql.user SET authentication_string = PASSWORD('qwc@113.'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';

FLUSH PRIVILEGES;

----------------------mysql:热备份,清理日志数据,注意:mysql服务器需要和远程服务器是免密登录,创建公私钥,这个脚本只是实现了全备

#脚本功能:

#1.清理二进制日志binlog

#2.清理错误日志(Error Log)。

#3.清理慢查询日志(Slow Query Log)。

#4.执行全量备份。

#5.将备份文件上传到远程服务器。

前言:需要替换你的日志路径,每个人的情况不一样

yum -y install rsync

#远程服务器:

ssh-keygen -t rsa -b 2048

ssh-copy-id 150mysql

mkdir -p /store/mysql

chmod 755 /store/mysql

#mysql服务器:

ssh-keygen -t rsa -b 2048

ssh-copy-id 136node

mkdir -p /backup/{mysql,script,logs}

chmod -R 755 /backup/{mysql,script,logs}

mysql_config_editor set --login-path=backup --user=root --password #插件存储密码,用户脚本免交互登录mysql

#日志存放位置查看

mysql -uroot -p

show variables like '%log_error%'; #查看错误日志,报错查看这个日志

log-error=/var/log/mysql/error.log

show variables like '%log_bin%'; #binlog日志用于数据恢复,show variables like '%binlog_format%'; #查看binlog记录信息的方式 ROW行记录

log_bin=/var/lib/mysql/mysql-bin

SHOW VARIABLES LIKE 'slow_query_log'; #查看慢日志

/var/log/mysql/mysql-slow.log

vim /etc/my.cnf

client

sock=/data/mysql/mysql.sock

mysqld

datadir=/data/mysql

socket=/data/mysql/mysql.sock

log-error=/var/log/mysql/error.log

pid-file=/var/run/mysqld/mysqld.pid

log_bin=/data/mysql/mysql-bin

slow_query_log = 1

slow_query_log_file = /var/log/mysql/mysql-slow.log

long_query_time = 2

sudo mkdir -p /var/log/mysql

sudo chown -R mysql:mysql /var/log/mysql

systemctl restart mysqld

---【全量备份+热备份+rsync】

root@150m01 /backup/script# cat auto_mysqldump.sh

#!/bin/bash

设置环境变量

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

export PATH

获取当前日期

DATE="$(date +%F)"

本地备份目录

local_backup_dir=/backup/mysql

mkdir -p "${local_backup_dir}"

日志文件路径

log_file="/backup/logs/mysql_backup.log"

mkdir -p "(dirname "{log_file}")"

远程服务器信息

REMOTE_SERVER="136node" # 替换为远程服务器的IP地址或主机名

REMOTE_DIR="/store/mysql" # 替换为远程服务器的备份目录

REMOTE_SSH_PORT=22 # 替换为远程服务器的SSH端口

MySQL配置

MYSQL_LOGIN_PATH="backup" # 使用 mysql_config_editor 设置的登录路径

SOCKET_FILE="/var/lib/mysql/mysql.sock" # MySQL 套接字文件路径

清理二进制日志

echo "(date): Cleaning up binary logs..." \>\> "{log_file}"

mysql --login-path={MYSQL_LOGIN_PATH} --socket={SOCKET_FILE} -e "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 30 DAY;" >> "${log_file}" 2>&1

清理错误日志

echo "(date): Cleaning up error log..." \>\> "{log_file}"

ERROR_LOG="/var/log/mysql/error.log"

if -f "$ERROR_LOG" ; then

cat /dev/null > $ERROR_LOG

echo "(date): Error log cleaned." \>\> "{log_file}"

else

echo "(date): Error log not found." \>\> "{log_file}"

fi

清理慢查询日志

echo "(date): Cleaning up slow query log..." \>\> "{log_file}"

SLOW_QUERY_LOG="/var/log/mysql/mysql-slow.log"

if -f "$SLOW_QUERY_LOG" ; then

cat /dev/null > $SLOW_QUERY_LOG

echo "(date): Slow query log cleaned." \>\> "{log_file}"

else

echo "(date): Slow query log not found." \>\> "{log_file}"

fi

执行 MySQL 热备份

echo "(date): Performing MySQL hot backup..." \>\> "{log_file}"

mysqldump --login-path={MYSQL_LOGIN_PATH} --socket={SOCKET_FILE} --all-databases > "{local_backup_dir}/hot_backup-{DATE}.sql"

if $? -eq 0 ; then

echo "(date): MySQL hot backup completed successfully" \>\> "{log_file}"

else

echo "(date): MySQL hot backup failed" \>\> "{log_file}"

exit 1

fi

使用 rsync 同步本地备份文件到远程服务器

echo "(date): Syncing backup files to remote server using rsync..." \>\> "{log_file}"

rsync -vzrtopg --progress --delete -e "ssh -p {REMOTE_SSH_PORT}" "{local_backup_dir}/" "{REMOTE_SERVER}:{REMOTE_DIR}/" >> "${log_file}" 2>&1

if $? -eq 0 ; then

echo "(date): Backup files synced successfully" \>\> "{log_file}"

else

echo "(date): Backup files sync failed" \>\> "{log_file}"

exit 1

fi

删除本地旧的备份文件(保留最近30天的备份)

echo "(date): Deleting old local backups..." \>\> "{log_file}"

find "${local_backup_dir}" -name "hot_backup-*.sql" -mtime +30 -delete

if $? -eq 0 ; then

echo "(date): Old local backups deleted successfully" \>\> "{log_file}"

else

echo "(date): Old local backups deletion failed" \>\> "{log_file}"

fi

在远程服务器上删除旧的备份文件(保留最近30天的备份)

echo "(date): Deleting old remote backups..." \>\> "{log_file}"

ssh -p {REMOTE_SSH_PORT} "{REMOTE_SERVER}" "find {REMOTE_DIR} -name 'hot_backup-\*.sql' -mtime +30 -delete" \>\> "{log_file}" 2>&1

if $? -eq 0 ; then

echo "(date): Old remote backups deleted successfully" \>\> "{log_file}"

else

echo "(date): Old remote backups deletion failed" \>\> "{log_file}"

fi

echo "(date): MySQL cleanup and backup completed." \>\> "{log_file}"

chmod +x auto_mysqldump.sh

----定时执行

crontab -e

#*/2 * * * * /backup/script/auto_mysqldump.sh #每两分钟同步一次,测试用

0 2 * * * * /backup/script/auto_mysqldump.sh #实际使用,每天晚上2点钟更新

----验证查看

mysql服务器:

ls /backup/mysql/

hot_backup-2025-03-31.sql

远程服务器:

ls /store/mysql

hot_backup-2025-03-31.sql

----删除测试

1.navicat登录mysql数据库删除一个库,例如test库。

2.还原

mysql -uroot -p

source /backup/mysql/hot_backup-2025-03-31.sql

------------------------------全量+增量,两个脚本不一样,直接复制

vim auto_mysqldump.sh

#!/bin/bash

设置环境变量

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

export PATH

获取当前日期

DATE="$(date +%F)"

本地备份目录

local_backup_dir=/backup/mysql

mkdir -p "${local_backup_dir}"

日志文件路径

log_file="/backup/logs/mysql_backup.log"

mkdir -p "(dirname "{log_file}")"

远程服务器信息

REMOTE_SERVER="136node" # 替换为远程服务器的IP地址或主机名

REMOTE_DIR="/store/mysql" # 替换为远程服务器的备份目录

REMOTE_SSH_PORT=22 # 替换为远程服务器的SSH端口

MySQL配置

MYSQL_LOGIN_PATH="backup" # 使用 mysql_config_editor 设置的登录路径

SOCKET_FILE="/data/mysql/mysql.sock" # MySQL 套接字文件路径

清理二进制日志

echo "(date): Cleaning up binary logs..." \>\> "{log_file}"

mysql --login-path={MYSQL_LOGIN_PATH} --socket={SOCKET_FILE} -e "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 30 DAY;" >> "${log_file}" 2>&1

清理错误日志

echo "(date): Cleaning up error log..." \>\> "{log_file}"

ERROR_LOG="/var/log/mysql/error.log"

if -f "$ERROR_LOG" ; then

cat /dev/null > $ERROR_LOG

echo "(date): Error log cleaned." \>\> "{log_file}"

else

echo "(date): Error log not found." \>\> "{log_file}"

fi

清理慢查询日志

echo "(date): Cleaning up slow query log..." \>\> "{log_file}"

SLOW_QUERY_LOG="/var/log/mysql/mysql-slow.log"

if -f "$SLOW_QUERY_LOG" ; then

cat /dev/null > $SLOW_QUERY_LOG

echo "(date): Slow query log cleaned." \>\> "{log_file}"

else

echo "(date): Slow query log not found." \>\> "{log_file}"

fi

执行 MySQL 热备份

echo "(date): Performing MySQL hot backup..." \>\> "{log_file}"

mysqldump --login-path={MYSQL_LOGIN_PATH} --socket={SOCKET_FILE} --all-databases > "{local_backup_dir}/hot_backup-{DATE}.sql"

if $? -eq 0 ; then

echo "(date): MySQL hot backup completed successfully" \>\> "{log_file}"

else

echo "(date): MySQL hot backup failed" \>\> "{log_file}"

exit 1

fi

使用 rsync 同步本地备份文件到远程服务器

echo "(date): Syncing backup files to remote server using rsync..." \>\> "{log_file}"

rsync -vzrtopg --progress --delete -e "ssh -p {REMOTE_SSH_PORT}" "{local_backup_dir}/" "{REMOTE_SERVER}:{REMOTE_DIR}/" >> "${log_file}" 2>&1

if $? -eq 0 ; then

echo "(date): Backup files synced successfully" \>\> "{log_file}"

else

echo "(date): Backup files sync failed" \>\> "{log_file}"

exit 1

fi

删除本地旧的备份文件(保留最近30天的备份)

echo "(date): Deleting old local backups..." \>\> "{log_file}"

find "${local_backup_dir}" -name "hot_backup-*.sql" -mtime +30 -delete

if $? -eq 0 ; then

echo "(date): Old local backups deleted successfully" \>\> "{log_file}"

else

echo "(date): Old local backups deletion failed" \>\> "{log_file}"

fi

在远程服务器上删除旧的备份文件(保留最近30天的备份)

echo "(date): Deleting old remote backups..." \>\> "{log_file}"

ssh -p {REMOTE_SSH_PORT} "{REMOTE_SERVER}" "find {REMOTE_DIR} -name 'hot_backup-\*.sql' -mtime +30 -delete" \>\> "{log_file}" 2>&1

if $? -eq 0 ; then

echo "(date): Old remote backups deleted successfully" \>\> "{log_file}"

else

echo "(date): Old remote backups deletion failed" \>\> "{log_file}"

fi

执行 MySQL 增量备份

echo "(date): Performing MySQL incremental backup..." \>\> "{log_file}"

INCREMENTAL_BACKUP_DIR="${local_backup_dir}/incremental"

mkdir -p "${INCREMENTAL_BACKUP_DIR}"

创建增量备份目录

INCREMENTAL_BACKUP_FILE="{INCREMENTAL_BACKUP_DIR}/incremental_backup-{DATE}.sql"

mysqldump --login-path={MYSQL_LOGIN_PATH} --socket={SOCKET_FILE} --single-transaction --master-data=2 --flush-logs --all-databases > "${INCREMENTAL_BACKUP_FILE}"

if $? -eq 0 ; then

echo "(date): MySQL incremental backup completed successfully" \>\> "{log_file}"

else

echo "(date): MySQL incremental backup failed" \>\> "{log_file}"

exit 1

fi

使用 rsync 同步增量备份文件到远程服务器

echo "(date): Syncing incremental backup files to remote server using rsync..." \>\> "{log_file}"

rsync -vzrtopg --progress --delete -e "ssh -p {REMOTE_SSH_PORT}" "{INCREMENTAL_BACKUP_DIR}/" "{REMOTE_SERVER}:{REMOTE_DIR}/incremental/" >> "${log_file}" 2>&1

if $? -eq 0 ; then

echo "(date): Incremental backup files synced successfully" \>\> "{log_file}"

else

echo "(date): Incremental backup files sync failed" \>\> "{log_file}"

exit 1

fi

删除本地旧的增量备份文件(保留最近30天的备份)

echo "(date): Deleting old local incremental backups..." \>\> "{log_file}"

find "${INCREMENTAL_BACKUP_DIR}" -name "incremental_backup-*.sql" -mtime +30 -delete

if $? -eq 0 ; then

echo "(date): Old local incremental backups deleted successfully" \>\> "{log_file}"

else

echo "(date): Old local incremental backups deletion failed" \>\> "{log_file}"

fi

在远程服务器上删除旧的增量备份文件(保留最近30天的备份)

echo "(date): Deleting old remote incremental backups..." \>\> "{log_file}"

ssh -p {REMOTE_SSH_PORT} "{REMOTE_SERVER}" "find {REMOTE_DIR}/incremental -name 'incremental_backup-\*.sql' -mtime +30 -delete" \>\> "{log_file}" 2>&1

if $? -eq 0 ; then

echo "(date): Old remote incremental backups deleted successfully" \>\> "{log_file}"

else

----验证查看

mysql服务器:

ls /backup/mysql/

hot_backup-2025-03-31.sql#全量文件 increxxx.sql#增量文件

远程服务器:

ls /store/mysql

hot_backup-2025-03-31.sql

----删除测试

1.navicat登录mysql数据库删除一个库,例如test库。

2.还原

mysql -uroot -p

source /backup/mysql/hot_backup-2025-03-31.sql #先还原全量文件

假设你有多个增量备份文件,需要按时间顺序依次应用它们。例如:

mysql -u root -p < /backup/mysql/incremental/incremental_backup-2024-07-31.sql

mysql -u root -p < /backup/mysql/incremental/incremental_backup-2024-08-01.sql

mysql -u root -p < /backup/mysql/incremental/incremental_backup-2024-08-02.sql

其他:脚本错误路径:tail -f /var/spool/mail/root

================!!!!!!!!!!!!!!更换data目录,不要默认的,不然更新mysql的时候,data所有数据会被覆盖消失=================

#直接把脚本粘贴上去把,免得错了

mkdir -p /data/mysql

chown mysql:mysql -R /data/mysql

cp -R /var/lib/mysql/* /data/mysql/

1.my.cnf配置文件的datadir,socket,log-bin目录也要切换为/data/mysql目录下

mysqld

datadir=/data/mysql

socket=/data/mysql/mysql.sock

log-error=/var/log/mysql/error.log

pid-file=/var/run/mysqld/mysqld.pid

log_bin=/data/mysql/mysql-bin

slow_query_log = 1

slow_query_log_file = /var/log/mysql/mysql-slow.log

long_query_time = 2

2.脚本里的socket路径更改/data/mysql/

SOCKET_FILE="/data/mysql/mysql.sock"

systemctl restart mysqld

#还有报错查看

tail -f /var/spool/mail/root

journalctl -xe | grep mysqld

相关推荐
千里马学框架4 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone4 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc4 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077004 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone4 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen4 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone4 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui