在 Fedora 系统中,我需要将 Owncloud 的 SQLite 数据库转换为 MySQL/MariaDB 数据库,我开始安装 MySQL:
# systemctl enable mysqld
# systemctl start mysqld
$ mysql_secure_installation
然后
$ mysql -u root -p
CREATE USER 'owncloud_user'@'localhost' IDENTIFIED BY '12345';
CREATE DATABASE IF NOT EXISTS owncloud;
GRANT ALL PRIVILEGES ON owncloud.* TO 'owncloud_user'@'localhost' IDENTIFIED BY '12345';
假设 owncloud_user 的密码12345
是Owncloud 7.0 管理员手册,输入
# php occ db:convert-type --all-apps mysql owncloud_user 127.0.0.1 owncloud
我被提示:
What is the database password?
数据库密码?我只为用户 owncloud_user 创建了密码,因此输入密码12345
后出现错误
[PDOException]
SQLSTATE[HY000] [1045] Access denied for user 'owncloud_user'@'localhost' (using password: YES)
附加信息:
机器已启用 IPv6
MariaDB [(none)]> SELECT user, host FROM mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| root | 127.0.0.1 |
| root | ::1 |
| owncloud_user | localhost |
| root | localhost |
+---------------+-----------+
答案1
您需要从 mysql 数据库中的授权表重新加载权限。您可以使用以下命令执行此操作:
$ mysql -u root -p
FLUSH PRIVILEGES;
EXIT;
答案2
您可以尝试指定 127.0.0.1 和/或 ::1 ,像这样
$ mysql -u root -p
CREATE USER 'owncloud_user'@'127.0.0.1' IDENTIFIED BY '12345';
CREATE USER 'owncloud_user'@'::1' IDENTIFIED BY '12345';
CREATE DATABASE IF NOT EXISTS owncloud;
GRANT ALL PRIVILEGES ON owncloud.* TO 'owncloud_user'@'127.0.0.1';
GRANT ALL PRIVILEGES ON owncloud.* TO 'owncloud_user'@'::1';
原因是这样的:http://dev.mysql.com/doc/refman/5.0/en/connecting.html
在 Unix 上,MySQL 程序会特殊处理主机名 localhost,与其他基于网络的程序相比,这种方式可能与您预期的不同。对于与 localhost 的连接,MySQL 程序会尝试使用 Unix 套接字文件连接到本地服务器。