MySQL8.0常用命令

----------------------------------------------------------------------------------------------------------------------------------------------------- 

--查询数据库中哪些线程正在执行

show processlist;
#查版本
mysql -V
mysql> select version();
mysql -h127.0.0.1 -P3306 -uroot -p123456
# 查看是否开启binlog
mysql> SHOW VARIABLES LIKE '%log_bin%';
log_bin为ON代表MySQL已经开启binlog日志记录
log_bin_basename配置了binlog的文件路径及文件前缀名
log_bin_index配置了binlog索引文件的路径
mysql> show variables like '%log_bin%';
mysql> show binary logs;
mysql> show master status;
mysql> flush logs; 
mysql> show binary logs;
mysql> reset master;

系统变量有很多查询方式,以下为4种常用的查询变量值方法:

  • 通过show命令查看
  • 通过select命令查看
  • 通过命令行工具mysqladmin查看
  • 通过查询performance_schema视图查看

show variables like 'autocommit'; -- 等于show session variables like 'autocommit'; show global variables like 'autocommit';

select @@autocommit; -- 等于 select @@session.autocommit; select @@global.autocommit;

mysqladmin variables > variables.txt

通过performance_schema视图查看
MySQL的performance_schema提供了几张视图可以直接用SQL查询变量信息:

global_variables 查询所有全局变量值
session_variables 查询所有会话变量值(当前会话)
variables_by_thread 查询每个会话的变量值(比session_variables多了一个thread_id)
variables_info 查询变量最近一次的设置信息,包括变量来源,范围,修改人,修改时间等
示例:查看全局变量autocommit的值:

select * from performance_schema.global_variables where variable_name='autocommit';
set global max_connections=500; set @@global.max_connections=500;

show master status
#启动slave
stop slave
start slave
#查看slave的状态
show slave status\G(注意没有分号)

授权
cd /usr/local/mysql
ls
改变mysql/data 权限
chown -R mysql:mysql /var/mysql/data
chown -R mysql:mysql /usr/local/mysql
chmod -R 750 /var/mysql/data
chown -R mysql. /usr/local/mysql
chmod -R 777 /usr/local/mysql

跳过事务

stop slave;
set global sql_slave_skip_counter=1;
start slave;

 

 

 

 

 --------------------------------------------------------------------------------------------------------------
vi /etc/mysql/my.cnf

# 服务ID
server-id=1
# binlog 配置 只要配置了log_bin地址 就会开启
log_bin = /var/lib/mysql/mysql_bin
# 日志存储天数 默认0 永久保存
# 如果数据库会定期归档,建议设置一个存储时间不需要一直存储binlog日志,理论上只需要存储归档之后的日志
expire_logs_days = 30
# binlog最大值
max_binlog_size = 1024M
# 规定binlog的格式,binlog有三种格式statement、row、mixad,默认使用statement,建议使用row格式
binlog_format = ROW
# 在提交n次事务后,进行binlog的落盘,0为不进行强行的刷新操作,而是由文件系统控制刷新日志文件,如果是在线交易和账有关的数据建议设置成1,如果是其他数据可以保持为0即可
sync_binlog = 1

查看日志列表

mysql> SHOW MASTER LOGS;

# 注:每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志

mysql> FLUSH LOGS;

通过mysqlbinlog执行恢复全部

# mysqlbinlog是MySQL自带的一个工具,一般在安装MySQL时mysqlbinlog也会被放入可执行目录下,可以直接执行
# 如果不能直接使用mysqlbinlog命令,可以通过 find / -name "mysqlbinlog" 查找一下这个工具在什么位置
# 然后指定全路径执行即可:如 /usr/bin/mysqlbinlog --no-defaults ...
mysqlbinlog --no-defaults /var/lib/mysql/mysql_bin.000004 | mysql -h127.0.0.1 -P3306 -uroot -p123456

# 查看全部库
mysql> SHOW DATABASES;
# 切换到binlog_test_db库
mysql> USE binlog_test_db;
# 查看库中所有的表
mysql> SHOW TABLES;
# 查看表中的数据
mysql> SELECT * FROM binlog_test_table;

4.3、通过指定位置区间恢复

# 通过位置区间恢复
mysqlbinlog --no-defaults /var/lib/mysql/mysql_bin.000006 --start-position=232 --stop-position=2220 | mysql -h127.0.0.1 -P3306 -uroot -p123456

/var/lib/mysql/mysql_bin.000006 : 要操作binlog文件
–start-position=232 :数据恢复的起始位置
–stop-position=2220 :数据恢复的结束位置
mysql -h127.0.0.1 -P3306 -uroot -p123456 : 数据恢复需要登录数据库

1、注意:删除Linux中已存在的mysql,查看历史MySQL版本

MySQL官网下载:https://www.mysql.com

进入以后,默认页是MySQL的最新版本,如果选择之前版本,就点击 Looking for previous GA versions

我这里下载的是 mysql 8.4.3 的二进制版本

2、将Linux文件放到对应目录下:/usr/local
解压文件到当前目录并重命名为mysql-8.4.3:

tar -xvJf mysql-8.4.3-linux-glibc2.28-x86_64.tar.xz

mv mysql-8.4.3-linux-glibc2.28-x86_64 mysql-8.4.3

3、创建date目录并赋予权限

cd mysql-8.4.3

mkdir data

chmod -R 755 /usr/local/mysql-8.4.3/data/

4、创建mysql组和mysql用户,并将安装的MySQL权限给mysql用户

groupadd mysql #创建mysql组

useradd -g mysql mysql #创建mysql用户

chown -R mysql.mysql /usr/local/mysql-8.4.3

5、MySQL初始化
进入MySQL的bin目录下执行初始化

cd bin
./mysqld --user=mysql --basedir=/usr/local/mysql-8.4.3 --datadir=/usr/local/mysql-8.4.3/data --lower-case-table-names=1 --initialize

lower-case-table-names 设置不区分表名大小写

6、配置环境变量

vim ~/.bashrc #编辑环境变量文件
export PATH=$PATH:/usr/local/mysql-8.4.3/bin #文件中添加对应PATH路径
source ~/.bashrc #变量生效

7、授权并添加服务

chmod +x /etc/init.d/mysql
cd /usr/local/mysql-8.4.3
#设置开机自启服务
cp support-files/mysql.server /etc/init.d/mysql.server
chkconfig --add mysql

8、设置配置文件my.cnf

[mysqld]
# 设置server_id,同一局域网中需要唯一
server_id=100
# 开启二进制日志
log_bin=mysql-bin
# 设置需要同步的数据库
binlog_do_db=test1
#binlog_do_db=test2
# 屏蔽系统库同步
binlog_ignore_db=mysql,information_schema,performance_schema
# 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
# 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
# 二进制日志过期清理时间。默认值为0,表示不自动清理。
binlog_expire_logs_seconds = 604800
# 设置密码规则为mysql_native_password(因为博主使用的软件未更新使用caching_sha2_password规则)
mysql_native_password = ON
plugin-load=mysql_native_password.so
plugin-dir=/usr/local/mysql-8.4.3/lib/plugin/
# 端口号
port=3306
# MySQL根目录
basedir=/usr/local/mysql-8.4.3
# MySQL的data目录
datadir=/usr/local/mysql-8.4.3/data
socket=/tmp/mysql.sock
# 设置mysql客户端默认字符集
character-set-server=UTF8MB4
# 在MySQL配置中禁用符号链接功能
symbolic-links=0
# 设置不区分表名大小写
lower-case-table-names=1
# 通过设置SQL_MODE来改变服务器的SQL语法和行为
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
# 启用全局事务标识符(GTID),用于标识复制拓扑结构中多个服务器上的事务
gtid_mode=ON
# 使用基于GTID的复制时强制执行严格一致性检查,防止数据不一致性
enforce_gtid_consistency=ON
# 表示slave将复制事件写进自己的二进制日志
log_slave_updates=1

9、启动MySQL查看对应状态

service mysql start
service mysql status

10、登录MySQL修改初始密码

mysql -u root -p #登录MySQL,输出password,初始密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

# 延伸:修改root用户对应的Host
use mysql
update user set Host='%' where User='root';
#对应的修改密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

flush privileges;

11、开启防火墙并开放3306端口

systemctl start firewalld #开启防火墙

firewall-cmd --permanent --zone=public --add-port=3306/tcp #开放3306端口

firewall-cmd --reload #刷新设置

MySQL8.4版本的主从备份

1、MySQL主从库安装一致
博主是直接虚拟机复制的,这里需要注意一点,从库的server-uuid会与主库重复。
处理方式是:主库或者从库找到auto.cnf文件,并将其删除,重启MySQL服务后重新生成新的server-uuid

find / -name auto.cnf #找到auto.cnf文件位置
rm -rf /usr/local/mysql-8.4.3/data/auto.cnf #删除auto.cnf文件
service mysql restart #重启服务生成新的server-uuid

2、MySQL主节点配置HOST

sudo tee -a /etc/hosts << EOF
172.18.0.137 mysql-master
172.18.0.73 mysql-slave1
EOF

3、从库my.cnf配置
主库配置按照安装时配置的就可以了,从库需要修改下

[mysqld]
# 设置server_id,同一局域网中需要唯一
server_id=101
#设置需要同步的数据库
binlog_do_db=test1
# binlog_do_db=test2
#屏蔽系统库同步
binlog_ignore_db=mysql,information_schema,performance_schema
# 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mysql-slave-bin
# 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
# 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
# 二进制日志过期清理时间。默认值为0,表示不自动清理。
binlog_expire_logs_seconds = 604800
# 设置密码规则为mysql_native_password(因为博主使用的软件未更新使用caching_sha2_password规则)
mysql_native_password = ON
plugin-load=mysql_native_password.so
plugin-dir=/usr/local/mysql-8.4.3/lib/plugin/
# 端口号
port=3306
# MySQL根目录
basedir=/usr/local/mysql-8.4.3
# MySQL的data目录
datadir=/usr/local/mysql-8.4.3/data
socket=/tmp/mysql.sock
# 设置mysql客户端默认字符集
character-set-server=UTF8MB4
# 在MySQL配置中禁用符号链接功能
symbolic-links=0
# 设置不区分表名大小写
lower-case-table-names=1
# 通过设置SQL_MODE来改变服务器的SQL语法和行为
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
# 启用全局事务标识符(GTID),用于标识复制拓扑结构中多个服务器上的事务
gtid_mode=ON
# 使用基于GTID的复制时强制执行严格一致性检查,防止数据不一致性
enforce_gtid_consistency=ON
# 表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
slave_skip_errors=1062
# relay_log配置中继日志
relay_log=mysql-relay-bin
# slave设置为只读(具有super权限的用户除外)
read_only=1

[client]
default-character-set=utf8mb4

4、重启主从库MySQL服务

service mysql restart


5、主库创建用户new@%并授权

mysql -u root -p

CREATE USER 'new'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; #新建用户

GRANT REPLICATION SLAVE ON *.* TO 'new'@'%'; #给用户授权,用于从库操作主库

FLUSH PRIVILEGES; # 刷新权限

FLUSH TABLES WITH READ LOCK; #锁定所有表并防止数据写入

SHOW BINARY LOG STATUS; # 查看主库的状态,如下

+------------------+----------+--------------+---------------------------------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+---------------------------------------------+------------------------------------------+
| mysql-bin.000009 | 655 | test1 | mysql,information_schema,performance_schema | 0fe417fd-b13d-11ef-beb0-000c29ee1261:1-6 |
+------------------+----------+--------------+---------------------------------------------+------------------------------------------+

UNLOCK TABLES; #释放表锁

6、从库开始主从备份

mysql -u root -p

CHANGE REPLICATION SOURCE TO
SOURCE_HOST='172.18.0.137',
SOURCE_PORT=3306,
SOURCE_USER='new',
SOURCE_PASSWORD='123456',
SOURCE_LOG_FILE='mysql-bin.000009', # SOURCE_LOG_FILE 主库中通过SHOW BINARY LOG STATUS 查看的文件名
SOURCE_LOG_POS=655; # SOURCE_LOG_POS 主库中通过show master status 查看的文件位置

start replica; # 启动备份

show replica status \G; # 查看slave状态,如下:

*************************** 1. row ***************************

下面四项正确即无问题。
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
Last_IO_Error:
Last_SQL_Error:

7、测试
主库执行:

create table test1.testtable
SELECT 'a' mark , 1 val
从库执行:

show tables;
+---------------+
| Tables_in_dws |
+---------------+
| testtable |
+---------------+
1 row in set (0.00 sec)

备份完成。

 

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------- 

----------------------------------------------------------------------------------------------------------------------------------------------------- 

----------------------------------------------------------------------------------------------------------------------------------------------------- 

MySQL8.0就地升级到MySQL8.4.0

-----------------------------------------------------------------------------------------------

 

场景1:查询所有数据库的总大小

--查询所有数据库的总大小
use information_schema;
select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB'as data from TABLES;
 
--统计一下所有库数据量
SELECT
SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 AS total_mb
FROM information_schema.TABLES;
 
--统计每个库大小
SELECT
table_schema,SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 AS total_mb
FROM information_schema.TABLES group by table_schema;
 

场景2:查看指定数据库的大小

use information_schema;
select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB'as data from TABLES where table_schema='pijiake';
 
场景3:记录数 
--查看所有数据库各容量大小
select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
group by table_schema
order by sum(data_length) desc, sum(index_length) desc;
 
--查看所有数据库各表容量大小
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
order by data_length desc, index_length desc;
 
--查看指定数据库容量大小(例:查看mysql库容量大小)
select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
where table_schema='test'; 
 
--查看指定数据库各表容量大小(例:查看mysql库各表容量大小)
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='test'
order by data_length desc, index_length desc;

1.4.检查未提交的XA事务

 如果您将XA事务与 InnoDB 一起使用,请在升级之前运行 XA RECOVER 以检查未提交的XA事务。如果返回结果,则通过发出 XA COMMIT 或 XA ROLLBACK 语句提交或回滚XA事务。
#检查没有未提交的xa事务
mysql> xa recover;
Empty set (0.00 sec)

1.5.确保数据都刷到硬盘上

 如果您正常运行MySQL服务器,并将 innodb_fast_shutdown 设置为 2 (冷关闭),请通过执行以下语句之一来配置它以执行快速或慢速关闭:
 
# 确保数据都刷到硬盘上,更改成0
mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"
mysql> show variables like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| innodb_fast_shutdown | 1     |
+----------------------+-------+
1 row in set (0.00 sec)
 
mysql> set global innodb_fast_shutdown=0;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| innodb_fast_shutdown | 0     |
+----------------------+-------+
SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown
SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown

1.6.升级前的初步检查

 mysqlcheck -u root -p --all-databases --check-upgrade

1.6.1.初步检查的内容有

1.6.1.1.不得存在以下问题

  • 不能有使用过时数据类型或函数的表。
  • 不能有孤立的 .frm 文件。
  • 触发器不能有缺失的或空的定义符或无效的创建上下文

1.6.1.2.不能不具有本机分区支持存储引擎的分区表

不能有使用不具有本机分区支持的存储引擎的分区表。要识别此类表,请执行以下查询:

SELECT TABLE_SCHEMA, TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE ENGINE NOT IN ('innodb''ndbcluster')
        AND CREATE_OPTIONS LIKE '%partitioned%';
 

查询报告的任何表都必须更改为使用 InnoDB 或不分区。要将表存储引擎更改为 InnoDB ,请执行以下语句:

ALTER TABLE table_name ENGINE = INNODB;

要使已分区表成为非分区表,请执行以下语句:
ALTER TABLE table_name REMOVE PARTITIONING;

1.6.1.3.关键字

MySQL 8.4中可能保留了一些以前没有保留的关键字。参见第11.3节“关键字和保留字”。这可能会导致以前用作标识符的单词变为非法。若要修复受影响的语句,请使用标识符引号。

1.6.1.4.数据字典使用的表同名的表检查

MySQL系统数据库中不能有与MySQL 8.4数据字典使用的表同名的表。要标识具有这些名称的表,请执行以下查询:

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'
    );
 

必须删除或重命名查询报告的任何表(使用 RENAME TABLE )。这还可能需要对使用受影响表的应用程序进行更改。

1.6.1.5.外键约束名称检查

不能有外键约束名称超过64个字符的表。使用此查询可标识约束名称过长的表:

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个字符的表,请删除该约束,然后使用不超过64个字符的约束名称将其添加回来(使用 ALTER TABLE )。

1.6.1.6.sql_mode检查

必须没有由 sql_mode 系统变量定义的过时SQL模式。尝试使用过时的SQL模式会阻止MySQL 8.4启动。应该修改使用过时SQL模式的应用程序以避免使用它们。

1.6.1.7.视图检查

不能有显式定义的列名超过64个字符的视图(在MySQL 5.7中允许列名超过255个字符的视图)。为避免升级错误,应在升级前更改此类视图。目前,识别列名超过64个字符的视图的唯一方法是使用 SHOW CREATE VIEW 检查视图定义。您还可以通过查询InformationSchema VIEWS 表来检查视图定义。

1.6.1.8.ENUM 或 SET 列元素长度检查

表或存储过程中的单个 ENUM 或 SET 列元素的长度不得超过255个字符或1020个字节。在MySQL 8.4之前, ENUM 或 SET 列元素的最大组合长度为64K。在MySQL 8.4中,单个 ENUM 或 SET 列元素的最大字符长度为255个字符,最大字节长度为1020个字节。(The 1020字节限制支持多字节字符集)。在升级到MySQL 8.0之前,请修改任何超过新限制的 ENUM 或 SET 列元素。否则将导致升级失败并出现错误。

1.6.1.9.lower_case_table_names 参数设置

如果您打算在升级时将 lower_case_table_names 设置更改为1,请确保在升级之前将架构和表名重新命名。否则,可能会由于架构或表名大小写不匹配而导致失败。您可以使用以下查询来检查是否有包含Unicode字符的架构和表名:

mysql> select TABLE_NAME, if(sha(TABLE_NAME) !=sha(lower(TABLE_NAME)),'Yes','No'as UpperCase from information_schema.tables;

注意:

如果升级到MySQL 8.4由于上述任何问题而失败,服务器会将所有更改恢复到数据目录。在这种情况下,删除所有重做日志文件,并在现有数据目录上重新启动MySQL 8.3服务器以解决错误。重做日志文件( ib_logfile* )默认位于MySQL数据目录中。修复错误后,在再次尝试升级之前执行缓慢关机(通过设置 innodb_fast_shutdown=0 )。

1.7.备份数据库

1.7.1逻辑备份

--多个数据库备份成1个文件

mysqldump -uroot -p  --databases  xiaomiaoao pijiake  > /root/all-databases2213.sql
 
--备份test数据库
mysqldump -uroot -p test > /data/mysqldb/tmp/test_exp_$(date +%F).sql

1.7.2.目录备份

--查看进程  确定使用的配置文件 安装目录

[root@localhost ~]# ps -ef | grep mysql
mysql      2232      1  0 13:10 ?        00:00:30 /mysqldb/mysql8/bin/mysqld --defaults-file=/mysqldb/my8.cnf
 
--确定安装目录和数据目录
[root@localhost ~]# cat /mysqldb/my8.cnf | grep dir
basedir=/mysqldb/mysql8  #mysql安装根目录
datadir=/mysqldb/data8 #mysql数据文件所在目录
 
--停止数据库
systemctl stop mysqld
mysql -uroot -p
shutdown;
mysqladmin -u root -p shutdown
 
[root@localhost ~]# ps -ef | grep mysql
无输出
 
--安装目录备份
cp -r /mysqldb/mysql8 /mysqldb/mysql8_bak_`date +%F`
--数据目录备份
cp -r /mysqldb/data8 /mysqldb/data8_bak_`date +%F`
--配置文件备份
cp /mysqldb/my8.cnf /mysqldb/my8.cnf_bak_`date +%F`

1.8.下载并安装新版本MySQL软件

#1.安装介质上传至/opt/下

#2.创建目录
mkdir -p /data/mysqldb840
#3.解压安装包
cd /opt
tar -xvf mysql-8.4.0-linux-glibc2.17-x86_64.tar.xz  -C /data/mysqldb840
#4.文件夹重命名为mysql8
mv /data/mysqldb840/mysql/data/mysqldb840/mysql840
#5.更改文件夹所属
chown -R mysql.mysql /data/mysqldb840/mysql840

1.9.更改配置文件

从MySQL 8.4.0开始,默认情况下不再启用已弃用的 mysql_native_password 身份验证插件。要启用它,请使用 --mysql-native-password=ON (在MySQL 8.4.0中添加)启动服务器,或者在MySQL配置文件的 [mysqld] 部分中包含 mysql_native_password=ON (在MySQL 8.4.0中添加)。

需注释掉配置文件中default_authentication_plugin参数,替换为mysql_native_password=ON。

更改/etc/my.conf配置

vi /mysqldb/my8.cnf

#认证策略解决登录ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded#
#default_authentication_plugin = mysql_native_password
 
#add by MySQL8.4.0
mysql_native_password=ON

二.开始升级

2.1.关闭数据库

 --1.进入原5.7 mysql命令行 正确关闭数据库
法1:
mysqladmin -uroot -p shutdown
 
[root@mysql]# mysql -uroot -p
Enter password:
#使用mysql shell 命令util.checkForServerUpgrade('root@127.0.0.1:3307', {"password":"XXXXX", "targetVersion":"8.0.26", "configPath":"/etc/my3307.cnf"}) 检查升级到目标版本8.0.26,确认没有error级别的问题
Errors:   0
Warnings: 17
Notices:  0
 
#检查没有未提交的xa事务
mysql> xa recover;
Empty set (0.00 sec)
 
# 确保数据都刷到硬盘上,更改成0
mysql> show variables like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| innodb_fast_shutdown | 1     |
+----------------------+-------+
1 row in set (0.00 sec)
 
mysql> set global innodb_fast_shutdown=0;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| innodb_fast_shutdown | 0     |
+----------------------+-------+
 
mysql> shutdown;
Query OK, 0 rows affected (0.00 sec)
 
mysql> exit
 
#查看进程和端口后,已无输出记录,确保已停止
[root@localhost mysqldb8]# ps -ef | grep mysql
root       6330   6202  0 07:35 pts/0    00:00:00 mysql -uroot -p -P2213 test
root       6466   6202  0 09:18 pts/0    00:00:00 mysql -uroot -p
root       6522   6293  0 09:58 pts/1    00:00:00 mysql -uroot -p
root       6603   6551  0 10:14 pts/3    00:00:00 grep --color=auto mysql
[root@localhost mysqldb8]# ss -ntl | grep 2213

2.2.用mysql8.4.0客户端直接启动数据库

 cd /data/mysqldb840/mysql840
bin/mysqld_safe --user=mysql --datadir=/mysqldb/data8 &

升级过程中日志内容:

 [root@localhost opt]# tail -300f /mysqldb/log8/mysqld_error.log

2.3..更改环境变量

因basedir由/mysqldb/mysql8 变成了/data/mysqldb840/mysql840,故相关环境变量修改如下

#更改环境变量

[root@localhost ~]# vi .bash_profile
...
MYSQL_DATA=/data/mysqldb/data
#mysql8.0弃用
#export PATH=$PATH://mysqldb/mysql8/bin
#export MYSQL_HOME=/mysqldb/mysql8
#add for mysql8.4.0
export MYSQL_HOME=/data/mysqldb840/mysql840
export PATH=$PATH:/data/mysqldb840/mysql840/bin
 
#生效环境变量
[root@localhost ~]# source .bash_profile
 
#查看版本
[root@localhost ~]# mysql -V
mysql  Ver 8.4.0 for Linux on x86_64 (MySQL Community Server - GPL)
[root@localhost ~]# mysql -uroot -p
root@localhost :(none) 10:40:24>select version();
+-----------+
| version() |
+-----------+
| 8.4.0     |
+-----------+
1 row in set (0.00 sec)
 
root@localhost :(none) 10:40:30>exit

2.4.更改配置文件

 vi /mysqldb/my8.cnf
basedir=/mysqldb/mysql8  #mysql安装根目录
替换为
basedir=/data/mysqldb840/mysql840  #mysql安装根目录
 
可用下面的批量替换
:%s#/mysqldb/mysql8#/data/mysqldb840/mysql840#g

2.5.配置系统服务

 --配置mysql8系统服务
cp /usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/mysqld.service_bak_20240508
 
[root@localhost ~]# cat /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
 
[Install]
WantedBy=multi-user.target
 
[Service]
User=mysql
Group=mysql
ExecStart=/data/mysqldb840/mysql840/bin/mysqld --defaults-file=/data/mysqldb/my.cnf
LimitNOFILE=65536 
LimitNPROC=65536

2.6.重新启动数据库

 --关闭数据库
mysql -uroot -p
shutdown;
 
--通过系统服务重启数据库
systemctl start mysqld
systemctl status mysqld
----------------------------------------------------------------------------------------------------------------------------------------------------- 
 
 
 
 
 
 
 

 

 

 

 



 
 
 
 
 
 
posted @   hanease  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2021-12-26 分布式文件系统KFS基础知识介绍
2021-12-26 Storm基本概念
2021-12-26 MVCC基本原理
点击右上角即可分享
微信分享提示