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;