mysql升级
Posted 还行少年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql升级相关的知识,希望对你有一定的参考价值。
mysql升级
一、安装mysql5.7
1、下载软件包并解压
#创建用户
groupadd mysql &> /dev/null
useradd mysql -g mysql -M -s /sbin/nologin &> /dev/null
#下载安装包并解压
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.36-el7-x86_64.tar.gz
tar xf mysql-5.7.36-el7-x86_64.tar.gz
#创建数据目录并修改属主
mv mysql-5.7.36-el7-x86_64 /data/mysql
mkdir -p /data/mysql/data
chown -R mysql:mysql /data/mysql/
2、修改配置文件
cat > /etc/my.cnf << EOF
[mysqld]
basedir=/data/mysql
datadir=/data/mysql/data
port = 3306
socket=/tmp/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/tmp/mysqld/mysqld.pid
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
no-auto-rehash
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
server-id = 11
log-bin=master-bin
#binlog_format = MIXED
log-slave-updates=true
sync_binlog = 0
skip-external-locking
performance_schema_max_table_instances=400
table_open_cache = 2048
key_buffer_size = 512M
sort_buffer_size = 8M
net_buffer_length = 4M
read_buffer_size = 4M
read_rnd_buffer_size = 8M
thread_cache_size = 300
query_cache_size = 64M
tmp_table_size = 246M
query_cache_type = 1
explicit_defaults_for_timestamp = true
#skip-networking
#skip-name-resolve
max_connections = 2000
max_connect_errors = 100000
open_files_limit = 65535
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#log-bin=mysql-bin
binlog_format=row
expire_logs_days = 10
slow_query_log=1
slow-query-log-file=/data/mysql/data/mysql-slow.log
long_query_time=0.5
#log_queries_not_using_indexes=on
early-plugin-load = ""
default_storage_engine = InnoDB
innodb_data_home_dir = /data/mysql/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /data/mysql/
innodb_buffer_pool_size = 3G
innodb_log_file_size = 64M
innodb_log_buffer_size = 16MB
innodb_flush_log_at_trx_commit = 0
innodb_lock_wait_timeout = 120
innodb_max_dirty_pages_pct = 90
innodb_read_io_threads = 4
innodb_write_io_threads = 4
EOF
3、创建socket、log、pid文件
#创建socket文件
touch /tmp/mysql.sock
chown mysql:mysql /tmp/mysql.sock
chmod 755 /tmp/mysql.sock
#创建log文件
touch /var/log/mysqld.log
chown -R mysql:mysql /var/log/mysqld.log
chmod 755 /var/log/mysqld.log
#创建pid文件
mkdir /tmp/mysqld
touch /tmp/mysqld/mysqld.pid
chown -R mysql:mysql /tmp/mysqld
chmod 755 /tmp/mysqld/mysqld.pid
4、启动服务
#指定目录安装mysql
cd /data/mysql/bin/
./mysqld --initialize --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data
#后台安全启动
./mysqld_safe --user=mysql &
5、修改默认密码
#获取启动密码
cat /var/log/mysqld.log | grep "temporary password" | awk 'print $NF'
#登录mysql、修改密码
./mysql -uroot -p
alter user 'root'@'localhost' identified by '123456';
grant all privileges on *.* to 'root'@'%' identified by '123456';
FLUSH PRIVILEGES;
exit
6、优化启动
#配置环境变量
cat >> /etc/profile << EOF
export MYSQL_HOME=/data/mysql
export PATH="$PATH:$MYSQL_HOME/bin"
EOF
source /etc/profile
#加入系统服务
cp -a /data/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add /etc/init.d/mysqld
chkconfig mysqld on
#重启mysql
pkill -9 mysqld
systemctl start mysqld
二、mysql5.7小版本更新
1、下载软件包并解压
#下载安装包并解压
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.38-el7-x86_64.tar.gz
tar xf mysql-5.7.38-el7-x86_64.tar.gz
chown -R mysql:mysql mysql-5.7.38-el7-x86_64
2、插入数据供升级后验证
3、升级mysql
#备份全库
mysqldump -uroot -p123456 --databases > /data/allbak.sql
cp -a /data/mysql /data/mysqlbak
#登录mysql执行慢速关闭
mysql -u root -p
select @@innodb_fast_shutdown;
SET GLOBAL innodb_fast_shutdown=0;
#关闭mysql
systemctl stop mysqld
#使用新的目录覆盖老的目录
\\cp -frp mysql-5.7.38-el7-x86_64/* /data/mysql
#启动服务,升级
systemctl start mysqld
mysql_upgrade -uroot -p
4、测试
#登录观察版本
mysql -u root -p
show variables like '%version%';
#查看数据完整性
5、回滚
#关闭数据库
systemctl stop mysqld
#将当前数据库备份或删除
mv /data/mysql /data/mysqlbak2
#将之前的数据库
mv /data/mysqlbak /data/mysql
systemctl start mysqld
#测试
三、mysql5.7升到到mysql8
1、检查升级的前置条件
#不得存在以下问题:
- 不得有使用过时数据类型或函数的表。
如果表包含 5.6.4 之前格式的 旧时间列(不支持小数秒精度的列)TIME, 则不支持就地升级到 MySQL 8.0 。如果您的表仍然使用旧的时间列格式,请在尝试就地升级到 MySQL 8.0 之前使用它们进行升级。有关更多信息,请参阅 MySQL 5.7 参考手册中的 服务器更改。 DATETIMETIMESTAMPREPAIR TABLE
- 不能有孤立.frm文件。
- 触发器不得缺少或为空的定义器或无效的创建上下文(由 character_set_client、 collation_connection、或 表Database Collation显示的属性 指示)。必须转储并恢复任何此类触发器以解决问题。 SHOW TRIGGERSINFORMATION_SCHEMA TRIGGERS
要检查这些问题,请执行以下命令:
mysqlcheck -u root -p --all-databases --check-upgrade
#不能有使用不支持本机分区的存储引擎的分区表。要识别此类表,请执行以下查询:
mysql -uroot -p
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE LOWER(TABLE_SCHEMA) = 'mysql'
and LOWER(TABLE_NAME) IN
(
'catalogs',
'character_sets',
'check_constraints',
'collations',
'column_statistics',
'column_type_elements',
'columns',
'dd_properties',
'events',
'foreign_key_column_usage',
'foreign_keys',
'index_column_usage',
'index_partitions',
'index_stats',
'indexes',
'parameter_type_elements',
'parameters',
'resource_groups',
'routines',
'schemata',
'st_spatial_reference_systems',
'table_partition_values',
'table_partitions',
'table_stats',
'tables',
'tablespace_files',
'tablespaces',
'triggers',
'view_routine_usage',
'view_table_usage'
);
#查询报告的任何表都必须更改为使用 InnoDB或不分区。要将表存储引擎更改为InnoDB,请执行以下语句:
ALTER TABLE table_name ENGINE = INNODB;
#要使分区表不分区,请执行以下语句:
ALTER TABLE table_name REMOVE PARTITIONING;
#MySQL 5.7 mysql系统数据库中不能有与 MySQL 8.0 数据字典使用的表同名的表。要识别具有这些名称的表,请执行以下查询:
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME IN
(SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1),
INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1)
FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN
WHERE LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);
#不能有外键约束名称超过 64 个字符的表。使用此查询来识别约束名称过长的表:
SELECT DISTINCT NAME, SPACE, SPACE_TYPE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES
WHERE NAME LIKE '%#P#%' AND SPACE_TYPE NOT LIKE 'Single';
2、下载软件包并解压
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.25-el7-x86_64.tar.gz
tar xf mysql-8.0.25-el7-x86_64.tar.gz
chown -R mysql:mysql mysql-8.0.25-el7-x86_64
mv mysql-8.0.25-el7-x86_64 /data/mysql8
3、升级mysql
#备份全库
mysqldump -uroot -p123456 --databases > /data/allbak.sql
cp -a /data/mysql /data/mysqlbak
#登录mysql执行慢速关闭
mysql -u root -p
select @@innodb_fast_shutdown;
SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown
#关闭mysql
systemctl stop mysqld
#修改my.cnf
vi /etc/my.cnf
basedir=/data/mysql8
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
#query_cache_size = 64M
#query_cache_type = 1
4、启动mysql8
#使用现有数据目录启动 MySQL 8.0 服务器
cd /data/mysql8/bin
./mysqld_safe --user=mysql &
5、测试
#登录查看版本
./mysql -uroot -p
select version();
#检查数据完整性
四、mysql8.0小版本升级
1、下载软件包并解压
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.28-el7-x86_64.tar.gz
tar xf mysql-8.0.28-el7-x86_64.tar.gz
chown -R mysql:mysql mysql-8.0.28-el7-x86_64
mv mysql-8.0.28-el7-x86_64 /data/mysql8.1
2、升级mysql
#备份全库
mysqldump -uroot -p123456 --databases > /data/allbak.sql
cp -a /data/mysql8 /data/mysql8bak
#登录mysql执行慢速关闭
mysql -u root -p
select @@innodb_fast_shutdown;
SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown
shutdown
#修改my.cnf
vi /etc/my.cnf
basedir=/data/mysql8.1
datadir=/data/mysql8.1/data
innodb_data_home_dir = /data/mysql8.1/data
innodb_log_group_home_dir = /data/mysql8.1/
3、启动mysql
#使用现有数据目录启动 MySQL 8.0 服务器
cd /data/mysql8.1/bin
./mysqld_safe --user=mysql &
4、测试
#登录查看版本
./mysql -uroot -p
select version();
#检查数据完整性
以上是关于mysql升级的主要内容,如果未能解决你的问题,请参考以下文章