首页 > 数据库 >MySQL8.0常用命令

MySQL8.0常用命令

时间:2024-12-26 15:20:09浏览次数:6  
标签:binlog 8.4 -- MySQL 常用命令 MySQL8.0 mysql data

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

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

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

 

 

 

 



           

标签:binlog,8.4,--,MySQL,常用命令,MySQL8.0,mysql,data
From: https://www.cnblogs.com/hanease/p/18632799

相关文章

  • pip的常用命令
    pip是Python中用于安装和管理软件包的工具。pip最初是作为setuptools项目的一部分而开发的,其目的是为了简化Python软件包的安装过程。随着Python的广泛应用,pip也不断发展完善,如今已成为Python社区中安装软件包的重要工具。以下是工作中常用到的一些pip命令,主要适用于windows......
  • 详解Redis的常用命令
    目录KEYS语法EXISTS语法DEL语法EXPIRE语法TTL语法TYPE语法Redis数据结构和内部编码KEYS返回所有满⾜样式(pattern)的key。返回值:匹配pattern的所有key。语法⽀持如下统配样式:h?llomatcheshello,halloandhxlloh*llomatcheshlloandheeee......
  • Git 常用命令详解
    1.修改提交信息gitcommit--amend修改最后一次提交的提交说明。适合修正提交信息或补充文件。2.工作区与版本库工作区(WorkingDirectory)包含.git目录的地方称为工作区,即开发人员工作的本地目录。版本库(Repository).git目录内保存了版本控制的元数据和对象数......
  • Linux常用命令之locate命令详解
    locate是一个用于快速查找文件和目录的命令行工具,它通过预先构建的数据库来加速搜索过程。与find命令不同的是,locate不会实时遍历文件系统,而是依赖于定期更新的索引数据库,因此速度更快但可能不如find准确。功能与作用快速查找:locate通过查询预先构建的数据库来定位......
  • Linux常用命令总结
    du-sh*:用于显示当前目录下每个文件和子目录的大小。以下是这个命令中各个部分的作用:du:代表"diskusage"(磁盘使用情况),用于估算文件和目录所占用的磁盘空间。-s:代表"summarize"(汇总),用于显示每个指定文件或目录的总大小,而不是每个文件的详细信息。-h:代表"human-readable"(......
  • Linux系统常用命令详解
    文章目录一、Linux概述1、常见的操作系统2、Linux发展史3、Linux目录结构4、终端操作快捷键二、文件和目录操作1、pwd-显示当前目录2、cd-切换目录3、ls-列出目录内容4、mkdir-创建目录5、touch-创建空文件6、cp-复制文件或目录7、mv-移动或重命名文件8、......
  • conda常用命令
    condaenvlist列出环境列表condaactivate[环境名] 切换到[环境名]这个环境下condainstall[包名] conda安装包condauninstall[包名]卸载包 condaclean--all清理缓存、tarball文件以及未使用的文件什么时候用?之前安装包的时候进度条卡住不动了,于是我直接关......
  • 【Git】一文带你搞定Git常用命令及实际应用
    文章目录一、前言二、Git的安装三、Git的基本介绍1.原理解析2.分支管理2.1分支概念2.2分支管理策略3.Git的常用命令3.1配置git环境:gitconfig--global3.2拉取项目代码到本地:gitclone3.3提交及修改提交的信息:gitcommit3.4查看历史提交日志:gitlog3.5查看提......
  • Linux常用命令之sosreport命令详解
    sosreport是一个广泛应用于Linux系统中用于收集系统配置和诊断信息的命令行工具,尤其在RedHatEnterpriseLinux(RHEL)及其衍生发行版(如CentOS和Fedora)中非常流行。它能够生成详细的系统报告,帮助技术支持人员或管理员进行故障排除、性能分析以及安全审计等工作。以......
  • Linux常用命令之tree命令详解
    tree是一个用于递归地以树状格式列出或显示目录内容的小型跨平台命令行程序。它不仅能够展示文件夹及其子文件夹,还能包括文件名、权限信息、符号链接等详细数据,是理解和管理文件系统结构的有力工具。功能与作用展示目录结构:tree以直观的树形图形式展示指定目录下的所有......