一、前言
最近导出数据表的时候,屡屡受挫,让博主一度以为自己记错了,死活导不出来,后来才看到报错:
mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1/*!40102 ,
SQL_MODE=concat(@@sql_mode, _utf8 ',NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS') */': Unknown system variable 'OPTION' (1193)
行叭,下面咱们来说一下这个问题,以及导出数据表的正确姿势
二、正确导出数据表
1、报错解答
上面的报错是因为mysqldump
的版本问题,导致跟mysql
的版本不匹配,下面贴出一个google
来的答案。
如果您最近将MySQL版本升级到5.6,则mysqldump命令可能会引发以下错误:
mysqldump:无法执行'SET OPTION SQL_QUOTE_SHOW_CREATE = 1':您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册以获取正确的语法,以在第1行的'OPTION SQL_QUOTE_SHOW_CREATE = 1'附近使用(1064)
原因是MySQL 5.6删除了对“ SET OPTION”的支持,并且您的mysql客户端工具可能在较旧的版本上。最有可能是5.5或5.1。在MySQL bug网站上有关于此问题的更多信息。
最快的解决方案是将您的mysql客户端工具更新为5.6,您的问题将得到解决。不幸的是,目前有用于Ubuntu的MySQL 5.6工具的官方二进制文件。但是,我确实在很好的旧GitHub上找到了一个解决方案,您可以在其中将此自定义MySQL 5.6客户端工具添加到ubuntu存储库中。它像一种魅力。要在ubuntu上安装mysql客户端工具5.6,请运行以下命令:
所以如果大家也是有相同的错误,那么升级下mysqldump
即可,具体的升级步骤可以自行百度
2、正常的导出命令
mysqldump -h [hostname] -u [用户名] -p [数据库名] [数据表名]>/home/lijinfeng/test.sql;
注 : > xxx/test.sql 是你自己要保存sql文件的路径
咱们这里只是列一下导出的命令,具体的一些参数和含义,大家可以参考:
mysqldump命令使用详解
3、导出遇到小错误怎么办
报错信息:
mysqldump: Got error: 1044: Access denied for user 'manage'@'10.17.%' to database 'manage' when doing LOCK TABLES
遇到错误不要慌,这个错误看起来就是用户权限不够的原因,所以解决方案自然是加大用户权限或者导出的时候不锁表就好了,解决方案如下:
加上 --skip-lock-tables,声明不锁表即可
注:mysqldump 参数--lock-tables 参数是锁定当前导出库的所有表,实际生产环境慎用或者要声明不锁表
参考:https://www.cnblogs.com/kerrycode/p/6963880.html
另外:使用 --quick 和 --single-transaction 还可以加快导出速度。
4、根据where条件导出表
咱们平常开发的时候,经常会遇到类似的需求,表巨大,直接导出来成本太高了,那就只能加where
条件来进行导出了,具体案例如下:
mysqldump -h [hostname] -u [username] -p --skip-lock-tables [数据库名] [表名] --where="log_time >= '2020-07-15 00:00:00' and log_time < '2020-08-12 00:00:00'" --triggers=false --replace>/home/lijinfeng/test.sql;
注:--where : 直接写where条件即可,单双引号都可以,有人说linux只能用单引号,但双引号也是可以的
-t:只导数据
此处给出的案例都是博主这边一直在用的,可以放心食用,只要环境没问题,那导出来是妥妥的
end