学习mysql时遇到的各种问题(包括mysql备份时遇到的问题,查看元数据锁记录时没有结果返回,配置二进制日志的过期时间时遇到的问题)及解决办法

目录

1.mysql备份时遇到的问题及解决办法

2.查看元数据锁记录时没有结果返回

3.配置二进制日志的过期时间时遇到的问题


1.mysql备份时遇到的问题及解决办法

在使用mysqldump给mysql数据库中的数据进行备份时遇到warning:

mysqldump -h[ip] -u[用户名] -p[密码] [数据库名称] > [保存的路径,例如:D:/itcast.sql]

mysqldump: Couldn't execute 'SELECT COLUMN_NAME,                       JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"')                FROM information_schema.COLUMN_STATISTICS                WHERE SCHEMA_NAME = 'itcast' AND TABLE_NAME = 'course';': Unknown table 'COLUMN_STATISTICS' in information_schema (1109)

执行完成后,D盘里虽然也出现了itcast.sql文件,但是打开发现里面备份的数据不完整,只备份了数据库中的一张表数据。

因为新版的mysqldump默认启用了一个新标志,我们可以通过--column-statistics=0来禁用他。

输入以下命令语句即可完成备份:

mysqldump --column-statistics=0 -h[ip] -u[用户名] -p[密码] [数据库名称] > [保存的路径,例如:D:/itcast.sql]

2.查看元数据锁记录时没有结果返回

当我执行sql命令想查询都有哪些元数据锁产生时发现返回空结果:

select * from performance_schema.metadata_locks;
Empty set (0.00 sec)

原因是在MySQL5.7中,performance_schema库中新增了metadata_locks表,专门记录元数据锁的相关信息。首先要开启元数据锁记录,执行如下SQL开启

UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME = 'wait/lock/metadata/sql/mdl';

再次执行即可成功:

mysql> select * from performance_schema.metadata_locks;
+-------------+--------------------+----------------+-----------------------+-------------+---------------+-------------+--------+-----------------+----------------+
| OBJECT_TYPE | OBJECT_SCHEMA      | OBJECT_NAME    | OBJECT_INSTANCE_BEGIN | LOCK_TYPE   | LOCK_DURATION | LOCK_STATUS | SOURCE | OWNER_THREAD_ID | OWNER_EVENT_ID |
+-------------+--------------------+----------------+-----------------------+-------------+---------------+-------------+--------+-----------------+----------------+
| TABLE       | itcast             | tb_user_pro    |       139950504675744 | SHARED_READ | TRANSACTION   | GRANTED     |        |              32 |             47 |
| TABLE       | performance_schema | metadata_locks |       139950435766112 | SHARED_READ | TRANSACTION   | GRANTED     |        |              33 |             47 |
+-------------+--------------------+----------------+-----------------------+-------------+---------------+-------------+--------+-----------------+----------------+
2 rows in set (0.00 sec)

3.配置二进制日志的过期时间时遇到的问题

对于比较繁忙的业务系统,每天生成的binlog数据巨大,如果长时间不清除,将会占用大量磁盘空 间。因此我们可以在mysql的配置文件中配置二进制日志的过期时间,设置了之后,二进制日志过期会自动删除。但是在查看默认的二进制日志的过期时间的时候查询无结果返回。

show variables like '%binlog_expire%';
Empty set (0.00 sec)

上网查询过后了解到:

mysql8.0以下版本binlog保存时效 以天为单位,参数为expire_logs_days,默认0为永不过期。

mysql8.0以上版本binlog保存时效 以秒为单位,参数为binlog_expire_logs_seconds,默认的binlog过期时间为2592000秒,也就是30天。

我的linux上mysql的版本为5.7.41,所以执行以下查询参数语句即可。

mysql> show variables like '%expire%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| disconnect_on_expired_password | ON    |
| expire_logs_days               | 0     |
+--------------------------------+-------+

然后再执行以下sql语句(根据自己的需要设置过期时间)即可成功配置二进制日志的过期时间。

set global expire_logs_days=30;
 show variables like '%expire%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| disconnect_on_expired_password | ON    |
| expire_logs_days               | 30    |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值