我已经下载并解压了 MySQL 5.6.12 到/opt/mysql/server-5.6
。我想使用此数据库代替预装的 5.5 版本。但两个版本都不起作用。
当我想使用(预安装版本)启动服务器时mysqld --console
出现此错误:
user@user-desktop:~$ sudo mysqld --console
[sudo] password for user:
130719 19:26:17 [Warning] Can't create test file /var/lib/mysql/user-desktop.lower-test
130719 19:26:17 [Warning] Can't create test file /var/lib/mysql/user-desktop.lower-test
mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 2)
130719 19:26:17 [ERROR] Aborting
130719 19:26:17 [Note] mysqld: Shutdown complete
我的系统中没有这些目录:
/var/lib/mysql/
/var/lib/mysql/
/var/lib/mysql/
怎么会这样?MySQL 已预安装,但目录不存在。我应该手动创建它们吗?还是我需要做其他事情,运行某个程序来创建它们?我需要为它们设置什么模式?
系统中有一些mysql_install_db
程序。我应该运行它来设置 MySQL 吗?
答案1
确保以 root 身份安装 MySQL sudo apt-get install mysql-server
。这通常可以正常工作。
继续执行此处的操作。您可以创建缺少的目录,但请确保它们归 user\group mysql 所有:chown -R mysql:mysql /var/lib/mysql
如果你想更改 MySQL 的数据目录,请在 MySQL 的配置文件中进行更改/etc/mysql/my.cnf
然后您可以选择配置装甲允许 MySQL 读取\执行\修改新的数据目录和子目录或者,风险自负,你可以删除装甲。您可能需要root
执行以下操作:
/etc/init.d/apparmor stop
/etc/init.d/apparmor teardown
update-rc.d -f apparmor remove
apt-get purge apparmor
reboot
然后你就可以运行了mysql_install_db
。
但这样一来,数据库中就没有用户了!解决方法如下:
mysqld --skip-grant-tables --skip-networking & #Start MySQL manually with no authentication checks
mysql # Access MySQL, no username\password needed
use mysql;
DELETE FROM user;
INSERT INTO `user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`) VALUES('localhost','root',PASSWORD('root'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0'); #Add root user with passowrd, root
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'root'@'localhost';
FLUSH PRIVILEGES;
exit;
killall mysqld;
start mysql
mysql -u root -p
# Enter password, which is: root