Ubuntu 18.04的mysql配置跟16.04有些略微不同。。。踩了不少坑 先清空旧版本的mysql
sudo apt-get remove --purge mysql-\*
sudo apt-get install mysql-server mysql-client
但出现报错信息如下:
mysqld: Can't read dir of '/etc/mysql/mysql.conf.d/' (Errcode: 13 - Permission denied)
解决方法:重装apparmor或者按照网上所说的方法:Unable to install mysql with Can't read dir of '/etc/mysql/conf.d/' error
sudo /etc/init.d/apparmor stop
# sudo systemctl stop apparmor.service
sudo /etc/init.d/apparmor teardown
安装mysql
sudo apt install mysql-server
sudo apt install mysql-client
sudo apt install libmysqlclient-dev
安装完后可以用下述命令看下mysql是否正常启动
sudo netstat -tap | grep mysql
从Ubuntu 18开始mysql不是默认安装了,并且在安装时也不会提示输入密码等操作,所以正常的mysql -uroot -p
是无法登陆了,这时得从安装后的配置文件/etc/mysql/debian.cnf
中获取
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = NfF39kxWuGmjJozf
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = debian-sys-maint
password = NfF39kxWuGmjJozf
socket = /var/run/mysqld/mysqld.sock
从上述配置文件中可看出,apt安装mysql时设定的默认用户名是debian-sys-maint
,而密码则是一个随机的字符NfF39kxWuGmjJozf
所以先用上述用户名和密码先登陆到mysql中再修改账户和密码
mysql -udebian-sys-maint -p
mysql> use mysql;
mysql> update mysql.user set authentication_string=PASSWORD('newpassword'), plugin='mysql_native_password' where user='root';
mysql> flush privileges;
退出后,就能mysql -uroot -p
登陆了
ERROR 1067 (42000): Invalid default value for 'post_date'
这是因为sql_mode中的NO_ZEROR_DATE导制的,在strict mode中不允许'0000-00-00'作为合法日期
使用show variables like 'sql_mode';
命令查看sql_mode
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
通过set sql_mode
修改是临时修改,因此需要加个global
参数
mysql> set global sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> commit;
mysql> exit
然后再重新导入数据库wp.sql
mysql> create database wp;
mysql> use wp;
mysql> source /home/anlan/test.sql;
本文出自于http://www.bioinfo-scrounger.com转载请注明出处