如何为 MySQL 创建数据库目录结构?

如何为 MySQL 创建数据库目录结构?

我正在关注这个教程:

https://www.digitalocean.com/community/tutorials/how-to-use-mysql-with-your-ruby-on-rails-application-on-ubuntu-14-04

到目前为止,我安装了mysql 服务器 mysql 客户端 libmysqlclient-dev,我应该告诉 MySQL 创建它的数据库目录结构,它将使用 来存储它的信息sudo mysql_install_db

$ sudo mysql_install_db

[WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
[ERROR]   The data directory needs to be specified.

我以为跑步mysqld --initialize可以解决这个问题:

$ mysqld --initialize 

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
[ERROR] Aborting

我如何告诉 MySQL 创建用于存储其信息的数据库目录结构?

答案1

我设法使用先前回答的问题解决了这个问题, 如何在 Ubuntu 16.04 上安装 mysql,但我需要修改解决方案以适合我。

当我删除/移动/var/lib/mysql目录时,mysqld --initialize无法创建我想要的替换的数据库目录,尽管我在它前面加上了,但/var/lib/mysql它还是给了我。Errcode: 13 - Permission deniedsudo

我删除/移动了 的内容/var/lib/mysql/,但没有删除/移动目录本身。我再次尝试运行sudo mysql --initialize,它成功了,并在/var/lib/mysql/目录中创建了新内容。 生成的内容mysql --initialize与我之前删除/移动的内容不同。

我继续执行教程中的其余步骤,效果很好。

PS 我需要使用sudo -i来访问/var/lib/mysql

答案2

这是解决您问题的完整解决方案。

根据双重,建议只需按照错误的建议操作即可。某些功能已被弃用。

我们的建议是现在在您的测试系统上启用变量explicit_defaults_for_timestamp,以便您可以查看您的应用程序是否运行良好,然后为下一个版本做好准备,届时此功能将成为默认功能。

短期内,此警告并不危险。从长远来看,您必须为弃用的功能做好准备。通过在 my.cnf [mysqld] 部分中设置显式_defaults_for_timestamp = 1,您可以消除此警告。

你可以找出my.cnf文件位于以下位置,并且按此顺序值相互覆盖:

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • $MYSQL_HOME/my.cnf
  • [数据目录]/my.cnf
  • 〜/ .my.cnf

你也可以找到你的文件经过

find / -name my.cnf

我在 /etc/mysql/my.cnf 中添加了以下内容

[mysqld]
explicit_defaults_for_timestamp = 1

现在尝试

mysqld --initialize

而且我得到的错误减少了,没有时间戳

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
2018-11-12T20:13:45.024116Z 0 [ERROR] Aborting

这样好吗?不确定,所以我会更深入地研究。根据上述接受错误的堆栈答案你需要

sudo -i #log into root
cd /var/lib/mysql
rm -r *

su username  # get back to the original user

mysqld --initialize 

这仍然给了我完全相同的错误。没有变化!

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
2018-11-12T20:13:45.024116Z 0 [ERROR] Aborting

我不确定上述接受的答案是否有助于删除 /var/lib/mysql,但sudo有帮助:

sudo mysqld --initialize

有效... 没有任何错误!

答案3

遇到过类似的问题!这可能是由于目录/var/lib/mysql_replica/可能安装在其他磁盘或其他分区上,并AppArmor阻止 mysql 访问该目录。

MySQL 上存在这个错误。Bug #82281 - mysqld --initialize 报告“权限被拒绝”,无论权限如何

解决方法:禁用 AppArmor 的 mysqld 配置文件 sudo aa-disable /usr/sbin/mysqld

相关内容