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