mysql从5.7.43升级到8.0.37
检查工具、安装包下载
下载网址:https://dev.mysql.com/downloads/
兼容性检查
1、解压 tar -xf mysql-shell-8.0.38-linux-glibc2.17-x86-64bit.tar.gz
2、进入解压文件的bin目录 ./mysqlsh -uroot -p -S /tmp/mysql.sock -e “util.checkForServerUpgrade()”
数据库备份
1、进入mysql安装目录 bin/mysqldump -h127.0.0.1 -uroot -p --all-databases --single-transaction >>/root/mysqlbakup/20240829mysql5.7.41/all.sql.bak.20240829
2、安装目录备份、数据目录备份、配置文件备份
数据库关闭:
show variables like ‘innodb_fast_shutdown’;
set global innodb_fast_shutdown=0;
shutdown;
数据目录备份:cp -r /home/application/mysql/data /home/application/mysql/data_bak_date +%F
安装目录备份:cp -r /home/application/mysql/app/ /home/application/mysql/app_bak_date +%F
配置文件备份:cp /etc/my.cnf /etc/my.cnf_date +%F
升级安装mysql
1、解压文件,改文件夹名称:
tar -xf ./mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz
mv mysql-8.0.37-linux-glibc2.17-x86_64 mysql8.0.37
2、调整配置文件/etc/my.cnf
/**
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
server-id = 102
port = 3306
#mysql安装根目录
basedir = /usr/local/mysql
#mysql数据文件所在位置
datadir = /data/data
#数据库错误日志文件
log_error = /data/data/error.log
pid-file = /data/data/mysqld.pid
#默认认证插件
default_authentication_plugin=mysql_native_password
#默认数据恢复,默认0
innodb_force_recovery=0
#慢查询sql日志设置
slow_query_log = 1
slow_query_log_file = /data/data/slow.log
#慢查询执行的秒数,必须达到此值可被记录
long_query_time = 3
#CPU多核处理能力设置,读多,写少可以设成2:6的比例
innodb_write_io_threads = 4
innodb_read_io_threads = 8
#忽略同步过程错误
#slave-skip-errors = all
############################主从复制 设置########################################
#开启mysql binlog功能
log-bin=mysql-bin
#mysql binlog日志文件保存的过期时间,90天过期后自动删除
binlog_expire_logs_seconds = 7776000
#临时目录 比如load data infile会用到
tmpdir = /tmp
#设置socke文件所在目录
socket = /tmp/mysql.sock
#只能用IP地址检查客户端的登录,不用主机名
skip_name_resolve = 1
#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
# 最大连接数
max_connections=1000
# 连接失败的最大次数。防止有人从该主机试图攻击数据库系统
max_connect_errors=200
#SQL数据包发送的大小,如果有BLOB对象建议修改成1G
max_allowed_packet = 1G
#默认32kb, 设置512k
binlog_cache_size = 524288
innodb_buffer_pool_size = 24G
#建议先调整为2M,后期观察调整
sort_buffer_size = 2m
**/
3、调整软连接
删软连接:rm -r /usr/local/mysql
生成软连接:lln -s /usr/local/mysqldbms/mysql8.0.39 /usr/local/mysql
4、赋予文件夹权限
chown -R mysql:mysql mysql mysqldbms
5、启动并强制更新
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --upgrade=FORCE
检查数据结构
脚本文件:checkdatabase.sh
DB_USER="root"
DB_PASSWORD="123459"
DB_NAME="park"
HOST="127.0.0.1"
OUTPUT_FILE="table_check_results.txt"
mysql -u"$DB_USER" -p"$DB_PASSWORD" -h"$HOST" -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '$DB_NAME' AND TABLE_TYPE = 'BASE TABLE';" | while read table; do
{
echo "Checking table: $table"
mysql -u"$DB_USER" -p"$DB_PASSWORD" -h"$HOST" -e "USE $DB_NAME; CHECK TABLE \`$table\`;"
} >> "$OUTPUT_FILE" # 使用>>将命令组的输出追加到文件中
done
启动关闭查看mysql
sudo systemctl start mysql
sudo systemctl enable mysql
sudo systemctl status mysql