我正在关注这个教程:
到目前为止,我安装了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 denied
sudo
我删除/移动了 的内容/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