Ubuntu 16.04 安装Mariadb后root密码问题

ubuntu 16.04 的软件仓库中包含 MySQL和Mariadb(由于Mariadb是MySQL的一个分支,Mariadb兼容MySQL),安装MySQL的时候会自动提示输入和设置root用户的密码,而maridab会一路安装完成,可能会纳闷,root密码是啥?

默认mariadb安装完成后root没有密码。

初始安装完成后,登陆mariadb可以使用下面的命令(mariadb使用mysql命令和服务):

sudo mysql -u root

对于生产环境,可以使用命令 “mysql_secure_installation” (mysql_secure_installation是一个perl脚本)来优化一下mysql的设置。在使用该命令优化完成后,会设置root密码,但是使用下面的命令依然无法登陆MySQL。

mysql -u root -p

这是为什么呢?

其实这一切都是MySQL认证插件在作怪,使用命令”sudo mysql -u root” 登陆MySQL,查看mysql.user表,会发现如下内容:

select user, host, plugin from mysql.user;

看到plugin的值,是unix_socket,这里的意思就是mysql的root用户登录mysql使用unix_socket来验证登陆,如果使用系统的非root用户来登陆,由于对mysql的socket文件没有权限,所以即使有密码,也无法登陆,只能使用sudo命令来获取权限,不输入密码登陆。

如果想使用密码来登陆mysql,可以执行下面的操作:

UPDATE mysql.user SET plugin = 'mysql_native_password' where user = 'root';
FLUSH PRIVILEGES;

具体需要使用mysql_native_password 还是 unix_socket看自己的需求来定,如果只是使用命令行来登陆mysql,unix_socket可以省去输入密码的痛苦,如果需要phpmyadmin等软件来登陆mysql,则只好使用 mysql_native_password 了。

Ubuntu 通过脚本安装 MySQL

Ubuntu (包括 Debian)在安装MySQL Server 会提示输入root的密码,这样在使用脚本安装MySQL的时候会暂停再输入密码的阶段。下面的方法通过预先设置MySQL的默认root密码,在安装的时候自动完成密码的设置。

sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password password vagrant'
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password vagrant'
sudo apt -y install mysql-server

该方法只对应于MySQL,对于 MariaDB(MySQL的分支),在安装的时候并不设置默认的root密码。

参考链接:

  1. https://stackoverflow.com/questions/7739645/install-mysql-on-ubuntu-without-password-prompt