Ubuntu 安装 MariaDB
0x00 为什么选择MariaDB
MySQL 被 Oracle 收购后,存在闭源的风险,因此开源社区 fork 了MySQL独立开发来规避这个风险。MariaDB 无论是 API 还是命令行,都与 MySQL 完全兼容。作为坚定的开源主义者,选择 MariaDB 是信仰问题_!
0x01 两种安装方式
MariaDB 的安装非常简单,通常有两种安装方式。
-
直接从 Ubuntu 官方仓库安装
MariaDB 安装包可以在 Ubuntu 的官方仓库中找到,所以,最简单粗暴的安装方式就是直接 apt 从官方仓库安装了,命令如下:
sudo apt-get install mariadb-server
-
从 MariaDB 仓库中安装
这种方式略微复杂一点,步骤如下:
-
导入 GPG 秘钥
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
-
添加 MariaDB 仓库
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://ftp.utexas.edu/mariadb/repo/10.3/ubuntu bionic main'
-
更新仓库
sudo apt-get update
-
安装 MariaDB
sudo apt-get install mariadb-server
-
当然,你也可以选择自己编译安装……
安装完成后,mariadb 服务会自动启动,可以通过下面的命令检查服务状态:
sudo systemctl status mariadb
如果一切正常,应该像下面这样:

0x02 基本配置
安装完成后,与 MySQL 类似,可以进行一些基本的配置,执行下列命令:
sudo mysql_secure_installation
大致会让你设置密码、移除匿名用户、是否允许 root 用户远程登录、删除测试数据库等选项,根据提示进行操作就可以了。
之后,通过mysql -u USER_NAME -p
,然后根据提示输入密码就可以登录数据库了。
0x03 常见问题
虽然安装比较简单,但是实际使用中随便一个坑就得折腾半天,下面记录下自己踩过的坑。
- MariaDB 启动超时,报错信息如下图

重点是第四行 Active:failed (Result: timepout)
,这个锅需要 AppAromr 来背,详细分析可见 AppArmor and MySQL,在这里,我们只说解决方式。
依次执行如下命令:
sudo apt-get install apparmor-utils
sudo aa-complain /usr/sbin/mysqld
sudo systemctl reload apparmor
sudo systemctl restart mariadb
如果出现下列问题:
$ sudo aa-complain /usr/sbin/mysqld
Setting /usr/sbin/mysqld to complain mode.
ERROR: /etc/apparmor.d/usr.sbin.mysqld contains no profile
可以尝试如下命令
sudo aa-disable /usr/sbin/mysqldsudo aa-disable /usr/sbin/mysqld
然后重新载入 apparmor。
-
登陆时出现
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
MariaDB 好像默认启用了 UNIX auth_socket plugin,这就导致一个问题,登录时数据库用户使用系统用户认证体系来认证。这种情况下,如果使用
mysql -u root
的话,就会出现上面的错误信息。要解决这个问题,主要有两种思路:
-
创建与系统用户同名的数据库用户
# 登录数据库 $sudo mysql -u root # 选择 mysql 数据库 MariaDB [(none)]> USE mysql # 创建同名数据库用户 MariaDB [mysql]> CREATE USER 'zeamonk'@'localhost' IDENTIFIED BY ''; MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'zeamonk'@'localhost'; MariaDB [mysql]> UPDATE user SET plugin='unix_socket' WHERE User='zeamonk'; MariaDB [mysql]> FLUSH PRIVILEGES; MariaDB [mysql]> exit; # 重启数据库 sudo systemctl restart mariadb
-
更改 root 用户认证方式
默认认证方式:
MariaDB [mysql]> SELECT User, Host, plugin FROM mysql.user; +------+-----------+-------------+ | User | Host | plugin | +------+-----------+-------------+ | root | localhost | unix_socket | +------+-----------+-------------+
具体操作如下:
# 登录数据库 $sudo mysql -u root # 选择 mysql 数据库 MariaDB [(none)]> USE mysql # 更改认证方式 mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root'; mysql> FLUSH PRIVILEGES; mysql> exit; # 重启数据库 sudo systemctl restart mariadb
-
注意: 有的系统中 unix_socket 可能叫 auth_socket, 使用时需要结合系统实际进行修改。
欢迎关注公众号:

网友评论