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升级的主要内容,如果未能解决你的问题,请参考以下文章

mysql 5.1 升级 mysql 5.7 升级 mariadb10

MySql

IIS网站升级

用CRF做命名实体识别

Mac安装MySQL

mysql升级