MySQL与MariaDB
MariaDB 是 MySQL 的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。所以现在主流的 Linux 发行版基本都默认使用 MariaDB 作为默认的 MySQL 实现。ArchLinux 已经将Oracle的MySQL移至AUR 中。
安装
- yay -S mysql
#根据说明初始化MySQL
sudo mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql # 此操作会给你生成一个随机root密码(临时)
#启动 mysql 服务
sudo systemctl start mysqld
#可以进行一些安全设置,更改root密码,设置密码复杂度要求,禁止远程登录root帐号等 (建议)
mysql_secure_installation
可能遇到的问题
- error while loading shared libraries: libicuuc.so.63: cannot open shared object file: No such file or directory
目前(2019-05-21) Arch Linux 的ICU已经更新到64版了(Unicode组件标准库,以支持世界语言,实现最新版本的Unicode编码标准和Unicode区域设置数据),而AUR仓库里的MySQL还依赖icu63版,这里可以去AUR仓库里安装icu63版。
yay -S icu63
配置
- MySQL配置文件说明里不建议直接编辑默认配置文件, 我们可以自定义一个配置文件,追加到
/etc/mysql/my.cnf
#加载我们自定义的配置文件 /etc/mysql/myl.cnf
sudo tee -a /etc/mysql/my.cnf <<< “!include /etc/mysql/myl.cnf”
- 编辑配置文件
sudo vim /etc/mysql/myl.cnf
1 | [mysql] |
常用操作
重置 MySQL root 密码
现在主流Linux发行版基本全部使用systemd作为系统和服务管理器,可以使用systemd 配置 mysqld服务,不再使用mysql_safe。
- 停止mysqld守护进程
sudo systemctl stop mysqld
- 配置MYSQLD_OPTS环境变量(不启用授权表,不启用网络环境)
sudo systemctl set-environment MYSQLD_OPTS=“–skip-grant-tables --skip-networking”
- 重新启动mysql
sudo systemctl start mysqld
- 使用空密码重新登录root账户
mysql -u root -p
- 清空root 密码
UPDATE mysql.user SET authentication_string=null WHERE User=‘root’;
- 取消特权模式,重新启动mysqld服务
sudo systemctl unset-environment MYSQLD_OPTS
sudo systemctl restart mysqld
- 更新 root 密码 为 1234
mysql -u root -p
use mysql
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH caching_sha2_password BY ‘1234’;
添加新用户并授权
- 创建 名为test 密码为123,支持远程登录(%), 使用旧版MySQL密码认证算法(MySQL8引入caching_sha2_password, 之前版本使用mysql_native_password)的用户
CREATE USER ‘test’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘123’;
- 授权 test 用户对test 数据库拥有所有权限
GRANT ALL ON test.* TO ‘test’@‘%’;
深入学习
参考
- https://stackoverflow.com/questions/33510184/change-mysql-root-password-on-centos7/34207996#34207996
- https://wiki.archlinux.org/index.php/MariaDB_(简体中文)
- https://dev.mysql.com/doc/refman/8.0/en/option-files.html
- https://time.geekbang.org/column/article/68633
- https://stackoverflow.com/questions/50691977/how-to-reset-the-root-password-in-mysql-8-0-11
- https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html