使用命令行复制一个MySQL数据库
使用命令行复制一个MySQL数据库
我想使用命令行复制一个名为db1
的mysql数据库。在这样做的过程中,我想获取db1
中的所有表和字段,但不包括其值。\n我在这个主题上看到了很多SO问答。例如,Copy/duplicate database without using mysqldump。\n不幸的是,我无法完成此链接中建议的两步过程:\n
- \n
- 创建数据库
- 从db1转储到db2
\n
\n
\n下面是我从bash终端开始的代码:\n
ubuntu@ip-xx-xxx-xxx-xx:~$ sudo -i root@ip-xx-xxx-xxx-xx:~# mysql -h mysite.com -u timpeterson -p Enter password: mysql> create database `db2`; ERROR 1044 (42000): Access denied for user 'timpeterson'@'%' to database 'db2'
\n值得注意的是,只要我不输入sudo i
成为root
,我可以创建db2
。不幸的是,如果我不成为root,我无法找出如何远程访问我的db2
,这是我最终需要做的。也就是说,我不知道如何从我的网站应用程序mysite.com
访问db2
。
原因:问题的出现是因为用户没有足够的权限执行相应的操作。
解决方法:需要以root用户身份登录MySQL控制台,并给用户'timpeterson'@'%'授予对数据库'db2'的所有权限。具体操作如下:
1. 以root用户登录MySQL控制台。
2. 执行以下命令:GRANT ALL PRIVILEGES ON db2.* TO 'timpeterson'@'%';
这条命令将授予用户'timpeterson'@'%'对'db2'数据库的所有权限。
3. 再次尝试复制数据库操作,看是否成功。
如果在执行以上步骤时出现错误,可能是因为当前用户并非真正的root用户。可以通过执行以下命令来验证用户身份:SELECT user();
如果还有其他问题,可以在评论中提出,并在两小时后再次查看回复。
在使用命令行复制MySQL数据库时,可能会遇到以下问题:
问题原因:使用没有创建数据库权限的登录账号。
解决方法:使用具有创建数据库权限的登录账号,并按照以下步骤操作:
1. 从mysql管理员账号(通常是root或mysqladm[in])执行以下命令:
CREATE DATABASE db2; -- 根据应用程序需要,确定需要授予的特定权限 GRANT ALL PRIVILEGES ON db2.* TO 'timpeterson'@'%' IDENTIFIED BY 'timspassword'; FLUSH PRIVILEGES;
2. 在命令行中执行以下命令:
mysqldump --opt --no-data db1 --user=USERWITHACCESSTODB1 --password | mysql db2 --user=timpeterson --password
需要注意的是,FLUSH PRIVILEGES这一步可能会有一些问题,在某些安装环境中,权限不会自动重新加载,因此可能会出现授权了超级权限但用户仍无法执行任何操作的情况。
如果在执行`GRANT ALL PRIVILEGES ON db2.* TO 'timpeterson'@'%' IDENTIFIED BY 'timspassword';`命令后仍然出现`ERROR 1044 (42000): Access denied for user 'timpeterson'@'%' to database 'db2'`错误,可能需要按照以下步骤进行操作:
1. 以root身份创建db2,并在GRANT后执行FLUSH PRIVILEGES。
2. 退出MySQL客户端,以root用户重新登录,并为timpeterson添加更多权限。
这样应该能解决问题。
如果密码是`timspassword`,在执行第二条命令时,应该输入`--password`(或简写为`-p`),然后会提示输入密码。也可以输入`--password=timspassword`,但这样做不是一个好主意,因为密码会留在shell历史记录中。
在输入`-p`时遇到的问题是,会提示输入密码两次,但实际上只能输入一次,因为提示信息被连接在一起。因此,当只输入密码一次时会出现`mysqldump: Got error: 1045: Access denied for user 'timpeterson'@'localhost' (using password: YES) when trying to connect`错误。