代码改变世界

【MySQL】mysqldump使用指南

  abce  阅读(420)  评论(0编辑  收藏  举报

1.mysqldump不会备份sys库。但在使用mysqldump在执行--all-databases会清空mysql.proc导致sys无法正常使用;这是一个BUG,并且只存在于MySQL 5.7.x


2解决方案:
(1)mysql_upgrade install or upgrade sys schema
这个方案适用于sys库已经因为mysqldump导入而损坏的情况下使用。

1
2
3
4
5
6
7
8
9
10
11
# 删除 sys schema (An error occurs if a sys schema exists but has no version view
mysql> DROP DATABASE sys;
 
# 这个时候 sys schema 不应该存在
mysql> SHOW DATABASES;
 
# 最后,执行 mysql_upgrade sys schema 以恢复正常
mysql_upgrade --upgrade-system-tables --skip-verbose --force
 
mysql> SHOW DATABASES;
mysql> SELECT COUNT(*) FROM mysql.proc;

注意:mysql_upgrade 在修理 sys 库的同时,还修理 mysql 库和用户库表(期间加锁且速度一般),有极小可能会误伤;使用 mysql_upgrade 的时候要加上 --upgrade-system-tables,不然会扫描用户库表。

(2)全备时同时备份 sys 库

这个方案适用于需要还原的数据库,sys 库也不太正常的情况下使用;在全备后额外再备份一份 sys 库用于修复。

1
2
mysqldump -A --set-gtid-purged=OFF --master-data=2 --single-transaction --routines --events --triggers  > all.sql
mysqldump --databases --routines sys > sys_dump_`mysql -V|awk '{print $5}'|cut -b 1-6`.sql

注意:不适用于做主从时使用它。
注意:不适用于做主从时使用它。

(3)使用databases全备
这个方案适用于所有场景的全备需求,100% 安全。

1
2
3
4
5
6
7
8
9
10
11
12
select_databases="                                                                
    SELECT
        GROUP_CONCAT(schema_name SEPARATOR ' ')
    FROM
        information_schema.schemata
    WHERE
        schema_name NOT IN ('performance_schema','information_schema');"
 
databases=`mysql -NBe "$select_databases"`
mysqldump --set-gtid-purged=OFF --master-data=2 \
--single-transaction --routines --events --triggers \
--max_allowed_packet=256M  --databases > all.sql

(4)使用 mysql-sys 开源代码
如果你的数据库 sys 全部中招了,又是生产库。那你只能用这个方法;

mysql-sys:
https://github.com/mysql/mysql-sys

中记录了sys库的创建语句将文件下载到本地,然后根据数据库版本,执行以下命令即可。

1
2
3
4
5
6
7
8
9
# 安装前操作,内容是禁用掉 sql_log_bin,不记录到日志中。
mysql> source before_setup.sql
 
# 创建 sys 库,实际会调用其他文件夹中的 sql 语句
# 来进行表、视图、存储过程、触发器的创建
mysql> source sys_57.sql
 
# 安装后的操作,内容是将 sql_log_bin 恢复到操作前的状态
mysql> source after_setup.sql

MySQL 8,具体原因是从MySQL 8.0.0起就移除了mysql.proc这张表。


https://www.toutiao.com/article/6894154794278224395/

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2017-08-01 二进制安装mysql 5.6
2016-08-01 Oracle 11g RAC 第二节点root.sh执行失败后再次执行root.sh
2016-08-01 RAC GI安装,报"Task resolv.conf Integerity"验证失败
点击右上角即可分享
微信分享提示