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

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

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
----------------------------------------------------------------------------------------------------------------------------------------------------- 
 
 
 
 
 
 
 

 
 
 
 
 
 

MySQL8.0常用命令的更多相关文章

  1. MySQL8.0+常用命令

    开启远程访问 通过以下命令开启root用户远程访问权限: CREATE USER 'root'@'%' IDENTIFIED BY 'password'; GRANT ALL ON *.* TO 'r ...

  2. redis3.0常用命令

    1.服务器启动 1)快捷启动 $redis-server 2)指定配置文件启动 $redis-server redis.conf 2.客服端启动 1)快捷无密码启动 $redis-cli 2)有密码和 ...

  3. maven学习0 常用命令学习

    mvn clean install -Dmaven.test.skip=truemaven的package与install命令区别: package是把jar打到本项目的target下,而instal ...

  4. vue-cli 2.0 常用命令

    一.查询npm版本 npm -v 二.安装npm npm install npm g 三.安装webpack npm install webpack -g 四.安装vue命令行工具 npm insta ...

  5. ESXI常用命令

    1.简介 VMware vSphere ESXi6.0常用命令使用,对于一些个人认为比较常用的命令进行总结,如果读者需要了解更多请访问VMware官网下载文档,链接如下:https://www.vmw ...

  6. 史上最全的Kuberenetes 常用命令手册

    1.0 k8s 集群状态检查 # 查看集群信息 kubectl cluster-info systemctl status kube-apiserver systemctl status kubele ...

  7. 0、驱动及应用小技巧、uboot指令及环境变量配置、linux常用命令

    (内核make menuconfig之后,通过insmod安装的驱动都应该重新make,可能会出现一些莫名的问题) (nor flash/SDRAM/DM9000都受内存控制器控制,需要配置内存控制器 ...

  8. mysql8.0版本下命令行mysqld –skip-grant-tables 失效,无法登陆的问题

    1.管理员权限登陆cmd,不会使用管理员登陆的请搜索cmd,搜索结果右键. 2.命令行输入:net stop mysql;然后提示.服务停止中 --> 服务已停止,如出现其他错误请百度. 这只是 ...

  9. mysql8数据库修改root密码,以及创建用户遇到的坑,开启远程登录,用navicat进行mysql的远程连接,mysql8.0默认编码方式,部分参数配置查询命令

    yum 安装MySQL8 echo "删除系统默认或之前可能安装的其他版本的 mysql" for i in $(rpm -qa|grep mysql);do rpm -e $i ...

  10. Mysql8.0命令

    1.创建用户 create user 'username'@'localhost' identified by 'pwd' 2.修改访问权限 在mysql数据下修改user表用户host为'%' up ...

随机推荐

  1. esp8266+MQTT+DHT11(温湿度计) platformio

    esp8266 + MQTT + DHT11(温湿度计) 连线 #include <Arduino.h> #include <ESP8266WiFi.h> #include & ...

  2. openresty IP限流

    1.针对大流量大并发网络请求下,为了保证服务的正常运行,不得不针对性采取限流的方式来解决大流量带来的服务器的压力. 2.在目前项目中对于接入了不同的平台,所以需要针对具体的平台做相对应的限流,或者针对 ...

  3. 3.18 Linux懒人神器:命令自动补全功能!

    文件名(或者目录名)是执行 linux 命令中最常见的参数,例如前面介绍的 cd.mkdir.cp 等命令,都涉及到了文件名.然而对初学者来说,输入完整的文件名感觉很麻烦,尤其面临文件名(目录名)特别 ...

  4. 基于sqli-labs Less-1的sql联合注入详解

    SQLi Labs 是一个专为学习和测试 SQL 注入漏洞设计的实验平台,旨在帮助安全研究人员.开发者和网络安全爱好者深入理解并实践各种 SQL 注入攻击.该平台提供了一系列精心设计的实验环境,模拟真 ...

  5. Nuxt.js 应用中的 schema:extend事件钩子详解

    title: Nuxt.js 应用中的 schema:extend事件钩子详解 date: 2024/11/10 updated: 2024/11/10 author: cmdragon excerp ...

  6. 硬件设计很简单?合宙低功耗4G模组Air780E—开机启动及外围电路设计

    ​ Air780E是合宙低功耗4G-Cat.1模组经典型号之一,上期我们解答了大家关心的系列问题,并讲解了选型的注意要点. 有朋友问:能不能讲些硬件设计相关的内容? 模组的上电开机,是硬件设计调试的第 ...

  7. ARC127D Sum of Min of Xor

    ARC127D Sum of Min of Xor 性质分析加通用套路. 思路 首先我们把这题的 \(\min\) 给去掉,那么我们按位算贡献,可以求出和.这是这种式子的通用套路. 考虑加上 \(\m ...

  8. Microsoft.Extensions.AI 初探

    .NET Conf上的介绍 在今年的.NET Conf上Steve Sanderson带来了题为"AI Building Blocks - A new, unified AI layer&q ...

  9. Mac之终端工具iterm2

    1. 安装 iTerm2 下载地址:https://www.iterm2.com/downloads.html 下载的是压缩文件,解压后是执行程序文件,你可以直接双击,或者直接将它拖到 Applica ...

  10. 这些 JavaScript 编码习惯,让你最大程度提高你的项目可维护性!

    前言: 因为 JavaScript 语言是一门极其松散.极其自由的语言,这意味着我们可以随心所欲的操作它,这是他的优点,但同时也是它的缺点.在编码过程中,我们需要一种良好的规范或者习惯来保持应用程序的 ...