arch 安装配置 mysql 和 mariadb 数据库

现在主力开发环境是 arch,相关的环境安装也得跟上,数据库安装相对麻烦一点,在这里简单记录一下

ps:现在个人更多的使用 docker 搭建开发环境,传送门===》使用 docker 安装 mariadb,并挂载本地目录到容器中

安装 mariadb

一般公司采用的是 mysql,不过现在 arch 主推的是 mariadb,个人觉得也还行,我 blog 也使用的 mariadb

安装

yay -S mariadb

安装之后会有一个初始化提示,直接使用 sudo 权限运行即可

sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
# 初始化完成之后启动mariadb
sudo systemctl start mariadb

初始化完成之后执行配置命令,同样直接使用 sudo 权限运行,这里除了配置密码,基本一路回车即可

sudo mysql_secure_installation
# 完成之后重启mariadb
sudo systemctl restart mariadb

允许局域网访问

mariadb 默认是没有远程连接权限的,所以配置一下

# 登录mariadb
mysql -u root -p
# 切换数据库
mysql> use mysql;
# root 是允许访问的用户名
mysql> select host ,user ,password from user where user='root';
# 接下来配置允许访问的用户,采用授权的方式给用户权限
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION;
# 显示 Query OK 即配置成功
# 说明:root 是登陆数据库的用户,123456 是登陆数据库的密码,
# '%'就是意味着任何来源任何主机反正就是权限很大的样子。
# 最后配置好权限之后刷新使之生效
mysql> flush privileges;
mysql> exit
# 显示 Query OK 即配置成功 最后重启mariadb
sudo systemctl restart mariadb

mariadb 配置大小写敏感

linux 下 mariadb 默认还是大小写敏感的,这个可能会导致项目查询报错(我就是 spring 集成 quartz 定时任务框架启动报错才发现的这个问题)

# 首先还是登录数据库
mysql -u root -p;
# 查询大小写敏感相关配置
mysql> show variables like '%lower_case_table_names%';
# 查询结果说明
# 1-->大小写不敏感
# 0-->大小写敏感
# 2-->表名存储为给定的大小写但是比较的时候是小写的
mysql> exit
# 之后进入 /etc/my.cnf.d
# 编辑server.cnf, 一般my.cnf 是 includedir /etc/my.cnf.d 目录下的配置的
vim  /etc/my.cnf.d/server.cnf
# 找到[mysqlld]标签,在下边添加
lower_case_table_names=1
# 保存,退出,重启 mariadb 即完成配置
sudo systemctl restart mariadb

安转 mysql8

安装

yay -S mysql

初始化

一般来说这里输入安装成功后提示的初始化命令就行:

sudo mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql

但是,在实际使用中,我发现好像是 linux 下的 mysql 默认是区分大小写的,在实际中就会导致项目报错,很蛋疼,经过网上各种搜索后,基本就是清一色的修改 lower_case_table_names,然后信誓旦旦的去修改了,然后,就发现 mysql 炸了。

据说,这是 mysql8.0 要求我们不能在 initialize 之后再更改 lower_case_table_names 的值,也就是说,再通过更改 my.cnf 文件是不管用的。

所以在初始化时,就要设置 lower-case-table-names

sudo mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql --lower-case-table-names=1

启动 mysql 服务

sudo systemctl start mysqld

修改 root 密码

mysql -u root -p
mysql> ALTER user 'root'@'localhost' IDENTIFIED BY '123456';
##其中 123456 为新的 root 密码

修改用户登录密码加密规则

这里如果是老版的 Navicat,连接 mysql 可能会报错,原因是 mysql8.0.4 后的密码加密方式发生了改变。
原来的加密方式是 mysql_native_password,现在的是 caching_sha2_password,
而 navicat 可能还是用的老一套加密方式,因此变一下加密方式:

# 进入命令行,登录mysql (root用户)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';  #用原来的加密方式更新用户的密码
mysql> FLUSH PRIVILEGES; #刷新权限
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则 (这行我没有写,不过貌似也可以)

设置远程登录

默认 mysql 的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启 mysql 的远程访问权限。
主流的有两种方法,改表法和授权法。
相对而言,改表法比较容易一点,个人也是比较倾向于使用这种方法,因此,这里只贴出改表法

# 修改 mysql 库的 user 表,将 host 项,从 localhost 改为%。%这里表示的是允许任意 host 访问,如果只允许某一个 ip 访问,则可改为相应的 ip,比如可以将 localhost 改为 192.168.1.233,这表示只允许局域网的 192.168.1.233 这个 ip 远程访问 mysql。
# 切换数据库
mysql> use mysql;
# 修改user表
mysql> update user set host = '%' where user = 'root';
# 查询检查是否修改成功
mysql> select host, user from user;
# 刷新权限
mysql> flush privileges;
# 之后就可以切出去,尝试远程登录了

参考文章

Q.E.D.


梦醒花犹存,铁甲依然在