【MySQL】mysqldump服务器远程导表Got error和Couldn't execute问题解决

版权声明:本文为博主原创文章,未经博主允许不得转载。谢谢您的关注... https://blog.csdn.net/u013948858/article/details/85095181

操作:执行导表命令

# 普通的导表
mysqldump -ujwensh -pjwensh -h 192.168.1.1   dbname tablename > export_data.sql

# 有编码 有条件的导表
mysqldump -ujwensh -pjwensh -h 192.168.1.1 --default-character-set=utf8 
dbname tablename --where="id = 123456 and name = 'jwensh' " > export_data.sql

问题:命令后的报错 ‘Got error’

mysqldump: Got error: 1044: Access denied for user 'jwensh'@'%' to 
database 'dbname' when doing LOCK TABLES

原因及解决:就是没有权限

解决:
1.用户没有该LOCK锁表权限,所以需要数据库管理员给该用户添加对应数据库的操作权限,
当然这不是最优方案,因为正常操作数据库找管理员解决耽误时间还有数据库访问风险;

2.加参数,运行相同的mysqldump命令,只需添加‘--single-transaction’标志,
例如:mysqldump --single-transaction -u user -p 


使用mysqldump --help可以看到参数的解释:意思就是会自动关闭锁表操作
"""
--single-transaction 
                      Creates a consistent snapshot by dumping all tables in a
                      single transaction. Works ONLY for tables stored in
                      storage engines which support multiversioning (currently
                      only InnoDB does); the dump is NOT guaranteed to be
                      consistent for other storage engines. While a
                      --single-transaction dump is in process, to ensure a
                      valid dump file (correct table contents and binary log
                      position), no other connection should use the following
                      statements: ALTER TABLE, DROP TABLE, RENAME TABLE,
                      TRUNCATE TABLE, as consistent snapshot is not isolated
                      from them. Option automatically turns off --lock-tables.
"""

复查操作:

mysqldump -ujwensh -pjwensh -h 192.168.1.1 --default-character-set=utf8 
dbname tablename --where="id = 123456 and name = 'jwensh' " > export_data.sql

结果正常很意外又有异常 ‘Couldn't execute’

mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in 
your SQL syntax; check the manual that corresponds to your MySQL server version for the 
right syntax to use near 'OPTION SQL_QUOTE_SHOW_CREATE=1' at line 1 (1064)

原因:

mysqldump与mysql服务器版本不同的问题:

1. mysql server是5.6.23 ;
2. 而本地使用导表的mysqldump是自动安装的5.1.61的mysql rpm包:

# mysqldump --version
mysqldump  Ver 10.13 Distrib 5.1.61, for redhat-linux-gnu (x86_64)

# > select version();
+------------+
| version()  |
+------------+
| 5.6.23-log |
+------------+

所以我们再当前环境下需要使用5.6版本的mysqldump覆盖或者指定目录去运行后面的命令即可,
那么我么需要下载一个mysql 免安装版使用其mysqldump可执行文件来操作导表操作。

免安装MySQL下载:

找到你想要的版本,这个是5.6的下载链接:https://dev.mysql.com/downloads/mysql/5.6.html#downloads

可以下载到linux服务器也可以下载的window,解压缩后,进入到bin目录下,找到mysqldump文件,上传到执行导表命令的机器上(任意目录),然后就在linux服务器的当前目录下执行

# 仔细看 认真看,前面有 **[./]** 表示执行当前目录下的命令或脚本,当然记得chmod下权限

./mysqldump -ujwensh -pjwensh -h 192.168.1.1 --default-character-set=utf8 
dbname tablename --where="id = 123456 and name = 'jwensh' " > export_data.sql

OK 所有问题都解决,目录下会有一个sql文件,内容都在了。

猜你喜欢

转载自blog.csdn.net/u013948858/article/details/85095181