【问题标题】:duplicate a mysql database using the command line使用命令行复制 mysql 数据库
【发布时间】:2012-07-10 08:37:53
【问题描述】:

我想使用命令行复制一个名为db1 的mysql 数据库。这样做时,我想从db1 中获取所有表和字段,但不是它的值。

我已经看到很多关于这个主题的 SO Q&A。例如,Copy/duplicate database without using mysqldump。 不幸的是,我无法完成此链接中建议的两步过程:

  1. 创建数据库
  2. mysqldump 从 db1 到 db2

这是我从 bash 终端开始的代码:

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'

值得注意的是,只要我不通过键入sudo i 变成root,我就可以创建db2。不幸的是,如果我没有成为 root,我无法弄清楚如何远程访问我的db2,这是我最终需要做的。也就是说,我不知道如何从我的网络应用程序mysite.com 访问db2

【问题讨论】:

  • sudo 的目的是什么?无论如何你都需要向mysql提供用户名和密码
  • 我不知道在这种情况下sudo的目的是什么。如果我不需要它,我不会使用它。你能评论我上面问题的最后一段吗?如果不使用 sudo,我无法弄清楚如何远程访问 db2

标签: mysql database permissions terminal


【解决方案1】:

看起来您的第一个问题可能是权限问题。尝试以 root 身份登录 MySQL 控制台并执行GRANT ALL PRIVILEGES ON db2.* TO 'timpeterson'@'%';。然后再试一次。

【讨论】:

  • 我以 root 身份登录,当我输入:GRANT ALL PRIVILEGES ON db2.* TO 'timpeterson'@'%'; 我收到错误 ERROR 1044 (42000): Access denied for user 'timpeterson'@'%' to database 'db2'
  • 尝试从 MySQL 命令行发出这个命令:SELECT user();
  • 感谢@Iserni,你能看到上面关于这个问题当前状态的评论吗?抱歉,我必须出去一会儿,但会在 2 小时后回来查看。
  • 权限被拒绝错误告诉我你可能实际上不是root。
【解决方案2】:

当然,您需要使用具有创建数据库权限的登录名。

来自 mysql 管理员帐户(通常是 root 或 mysqladm[in]),

CREATE DATABASE db2;
-- instead of ALL PRIVILEGES, see what privileges you really need for the application
GRANT ALL PRIVILEGES ON db2.* TO 'timpeterson'@'%' IDENTIFIED BY 'timspassword';
FLUSH PRIVILEGES;

然后从命令行

mysqldump --opt --no-data db1 --user=USERWITHACCESSTODB1 --password | mysql db2 --user=timpeterson --password

FLUSH PRIVILEGES 特别棘手——在一些安装中,权限不会自动重新加载,因此您可能会发现自己将 Clark Kent 的超能力授予用户,而该用户仍然无法执行此操作任何东西。

【讨论】:

  • 通过输入:GRANT ALL PRIVILEGES ON db2.* TO 'timpeterson'@'%' IDENTIFIED BY 'timspassword'; 我仍然收到错误ERROR 1044 (42000): Access denied for user 'timpeterson'@'%' to database 'db2'
  • db2 已经创建(由root),并且作为root,在GRANT 之后,您还执行FLUSH PRIVILEGES,然后您使用正确的密码(这里是'timspassword'),对吗?
  • 是的,这一切都说得通。问题是当我是 root 时我无法创建 db2。抱歉,如果我在上面问题的代码中不清楚这一点。
  • 我知道您可以创建它,只是如果您这样做了,那么您将无法再从外部访问它。 GRANT PRIVILEGES 应该可以解决这个问题。
  • 无论如何,您可以将数据库创建为 timpeterson,然后退出 MySQL 客户端,以 root 用户身份重新登录,然后在 timpeterson 上获得更多权限吗?这也应该解决问题。
猜你喜欢
  • 2014-09-01
  • 2015-08-29
  • 1970-01-01
  • 2011-06-14
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多