mysql5.7.18备份还原

我只是想简单的备份某一个数据库所有内容(表,存储过程,视图等)

网上搜到的答案竟然垃圾的都不能执行成功,难道是版本问题???

如这个:https://www.cnblogs.com/adolfmc/p/9822389.html ,列子举得很详细,但是第一条测试就失败了,,,,竟然让用-database,不知道啥版本是这样的,反正我的提示错误:mysqldump: [ERROR] mysqldump: unknown option '-b'

正确语句应该是:

mysqldump -u你的账号 -p你的密码 --databases 你的数据库名称 > \你的文件目录\你的备份文件名称.sql

注意是--databases,不是--database(缺少s),也不是-databases(前缀应是双横杠--)。

这种方式可以备份成功,但是会提示:mysqldump: [Warning] Using a password on the command line interface can be insecure.

意思是你把密码直接明文写出来了,存在密码泄露隐患。

如果是手动备份,你可以用不明文显示密码的方式:

mysqldump -u你的账号 -p --databases 你的数据库名称 > \你的文件目录\你的备份文件名称.sql

这样按下enter键后会提示你再输入密码。(这种就跟大多数输入密码方式一致了,输入密码时光标不动,但不代表没有输入,正常输入即可,输完再按enter)

------- 2024.07.12 补充 ---------------------------------------------------

今天导出一个数据库的数据,迁移到另一个表时,使用上面的命令发现会包含drop database  和 use database 命令,但是我迁移后的库名字变了,所以这删库切库的操作是没必要的。

找到的第一种解决方案是加 --no-create-db 命令,但该命令只会去掉drop database命令,use databases 依然存在;

找到的第二种解决方案是不加 --databases,去掉该命令后导出的sql中不含drop databases 也不含 use databases,问题解决。

常用参数
-u [username]:指定MySQL数据库的用户名。
-p[password]:指定MySQL数据库的密码。注意,-p 和密码之间不能有空格。
-h [host]:指定MySQL数据库的主机名。
-P [port]:指定MySQL数据库的端口号。
--databases:导出一个或多个数据库。
--all-databases:导出所有数据库。
--no-create-db:不包含创建数据库的语句。
--no-create-info:不包含创建表的语句,只导出数据。
--single-transaction:在一个事务中导出数据,适用于InnoDB表。
--quick:不缓冲查询,直接导出到标准输出。
--lock-tables:开始导出前锁定所有表。
--routines:导出存储过程和函数。
--triggers:导出触发器。
--events:导出事件。
--add-drop-table:在每个表创建之前添加 DROP TABLE 语句。
--add-locks:在每个表导出之前增加 LOCK TABLES 并且之后 UNLOCK TABLE。
--extended-insert:使用具有多个 VALUES 列的 INSERT 语法。
--complete-insert:使用完整的 INSERT 语句(包含列名称)。
--compress:在客户端和服务器之间启用压缩传递所有信息。
--master-data:将当前服务器的binlog的位置和文件名追加到输出文件中。
--hex-blob:使用十六进制格式导出二进制字符串字段。
--skip-comments:不包含注释信息。
--skip-extended-insert:不使用具有多个 VALUES 列的 INSERT 语法。
--skip-lock-tables:不锁定表。
--skip-triggers:不导出触发器。
--default-character-set:设置默认字符集。
--no-data:不导出任何数据,只导出数据库表结构。
--result-file:直接输出到指定文件中。

-------- 补充结束 ------------------------------------------------------------

 还原倒是很容易,直接执行成功:

mysql -u 你的账号 -p 你的数据库 < \你备份的脚本文件.sql

通过命令行导出导入数据的方式有一个非常好的效果,就是外键约束可以不受影响的轻松创建,也没有创建的先后顺序问题。

 

因为我的mysql安装在docker里,所以需要先登录进docker容器里才能执行mysql命令:

docker exec -it 你的docker容器名称(或容器id) bash

 

补充一个查询当前库有哪些外键绑定的明细情况sql语句:

SELECT 
    TABLE_NAME AS '主表',
    REFERENCED_TABLE_NAME AS '外键关联表'
FROM
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
    TABLE_SCHEMA = '你的数据库' AND REFERENCED_TABLE_NAME IS NOT NULL;

 

posted @ 2022-02-28 10:41  一 定 会 去 旅 行  阅读(165)  评论(0编辑  收藏  举报