-----------------------------------------------------------------------------------------------------------------------------------------------------
--查询数据库中哪些线程正在执行
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