Install MariaDB on Ubuntu 16.04

with access denied when excuting mysql_secure_installation

Posted on February 17, 2017 in Server

昨晚给外包迁移服务器的时候需要安装MariaDB,然而并没有意识到apt上的MariaDB已经是10.x版本了,于是又被坑了一次。。。先是没有启动mysqld.service,然后又在执行mysql_secure_installation的输入root密码的时候一直出现

mysql (mariadb) ERROR 1698 (28000): Access denied for user ‘root’@’localhost’

最气的是明明没有密码。。。

不过还好及时想起在自己的manjaro上装MariaDB时也遇到了同样的问题,果断查一波arch wiki找到了之前的解决方案

https://wiki.archlinux.org/index.php/MySQL_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#.E6.B7.BB.E5.8A.A0.E6.96.B0.E7.94.A8.E6.88.B7

首先,安装完后应该执行

# mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

运行时间依服务器情况而定,可能会卡一段时间。这里必须注意的是,执行的用户。。。我当时用了sudo,结果为后面的access denied埋下了后患

按wiki上的说法,再执行

# systemctl start mysqld
# mysql_secure_installation
# systemctl restart mysqld

一般来说,第一条有可能上一步已经自动帮你执行了,但是第二条在输入root密码的时候就有可能问题了,系统会报

mysql (mariadb) ERROR 1698 (28000): Access denied for user ‘root’@’localhost’

原因其实挺简单。。。不是Google上说的去哪里哪里找默认密码,而是当前用户不是root。。。

看样子MariaDB的权限机制比mysql严格了一些,有点pgsql的感觉了,不过这样或许也是好事吧,会安全一点。

一路按实际情况设置好之后就该新建用户了,因为一般来说是不允许root远程登录的。执行

$ mysql -u root -p

MariaDB> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
MariaDB> GRANT ALL PRIVILEGES ON mydb.* TO 'monty'@'localhost'
MariaDB> FLUSH PRIVILEGES;
MariaDB> quit

mydb.*就是指你要给新用户权限的那个数据库。

最后一个小坑就是phpmyadmin不支持zip(黑人问号???

所以导入的时候sql太大就压成gzip吧,Mac下执行gzip xxx.sql就行了,也不费事。