跨服务器复制MySQL数据库时mysqldump执行报错求助
排查MySQL跨服务器数据库复制的语法错误问题
哦,我一眼就看出问题所在了——你把这条管道命令放到MySQL客户端里面执行了,对吧?这条命令是要在**系统Shell(比如bash、zsh,Windows下的PowerShell/CMD)**里运行的,绝对不能在mysql的交互提示符里敲!
为什么会报错?
当你在mysql客户端里输入mysqldump ...这类内容时,MySQL会把它当成SQL语句去解析,但mysqldump是系统层面的工具命令,根本不是合法的SQL语法,自然就会抛出你看到的那个语法错误了。
正确的操作步骤
- 先退出MySQL交互界面:如果现在正处在
mysql>提示符下,输入exit;或者按下Ctrl+D回到系统命令行。 - 替换命令里的占位符:把
<source_db_username>、<source_db_password>等尖括号包裹的内容换成你实际的数据库信息,然后直接在系统Shell里执行这条命令(注意最后不要加分号,这是Shell命令不是SQL):mysqldump -u<source_db_username> -p<source_db_password> -h<source_db_ip_address> source_database_name | mysql -u<target_db_username> -p<target_db_password> -h<aws_rds_endpoint> <aws_rds_db_name> - 更安全的做法:为了避免密码出现在命令历史里,建议不要在命令行直接写密码,只保留
-p参数,执行后交互式输入密码:
这样执行后会先提示你输入源数据库的密码,接着再提示输入目标RDS的密码,安全性更高。mysqldump -u<source_db_username> -p -h<source_db_ip_address> source_database_name | mysql -u<target_db_username> -p -h<aws_rds_endpoint> <aws_rds_db_name>
额外注意事项
- 要确保源服务器的防火墙允许你执行命令的机器访问3306端口
- 确认AWS RDS的安全组已经添加了你的IP地址,允许访问数据库端口
- 源数据库的用户需要拥有
SELECT和LOCK TABLES权限,目标RDS的用户需要拥有CREATE、INSERT等建库插数据的权限
内容的提问来源于stack exchange,提问作者PHP User
相关产品推荐
相关产品推荐

