部署某开源应用软件的体验环境,急需一个mysql数据库支持。对比了下mysql和mariadb,选择了mariadb。原因是以前用这个数据库挺顺手,兼容mysql,主要原因是它的二进制安装包特别小,下载快。
操作系统:ubuntu16.04
MariaDB版本:10.11.6。
安装方式:二进制安装包安装
以下是部署步骤
1、获取二进制包mariadb-10.11.6-linux-systemd-x86_64.tar.gz
地址:https://mariadb.org/download/?t=mariadb&p=mariadb&r=10.11.6&os=windows&cpu=x86_64&pkg=msi&m=gigenet
2、Root用户下顺次执行以下命令
# groupadd mysql
# useradd -g mysql mysql
# cd /usr/local
# tar -zxvpf /path-to/mariadb-VERSION-OS.tar.gz
# ln -s mariadb-VERSION-OS mysql
# cd mysql
# ./scripts/mariadb-install-db --user=mysql
# chown -R root .
# chown -R mysql data
3、测试mysql是否能正常启动,如果能启动,ctrl+c退出
#./bin/mysqld_safe --defaults-file=~/.my.cnf --user=mysql &
4、设置开机自启动
systemd文件是二进制包中写好的,只需要创建不存在的目录放进去即可
# cp support-files/systemd/mariadb.service /usr/lib/systemd/system/mariadb.service
# systemctl daemon-reload
5、用以下命令启动试试,肯定不行,报错看图
# systemctl start mariadb.service
# systemctl status mariadb.service
因为usr目录受保护(mariadb设置的安全策略),不能写入文件。所以官方给的方案是换个目录写入。比如
# mkdir /etc/systemd/system/mariadb.service.d/
# cat > /etc/systemd/system/mariadb.service.d/datadir.conf <<EOF
[Service]
ReadWritePaths=/usr/local/mysql/data
EOF
# systemctl daemon-reload
民间也有方案,比如关掉这个保护,处理办法参考如下
修改/usr/lib/systemd/system/mariadb.service文件
这两个配置项配空值
ProtectSystem=
ProtectHome=
# systemctl daemon-reload
再启动应该就没问题了
其它命令
# systemctl enable mariadb.service
# systemctl stop mariadb.service
6、MySQL账号配置
安装完成后默认有两个用户root和mysql。都是不设置密码的。接下来是账号配置和远程客户端访问配置,给root账号设置个密码,然后开启远程访问权限
MariaDB [(none)]> select user();
MariaDB [(none)]> use mysql;
MariaDB [mysql]> select user, password from user;
MariaDB [mysql]> update user set password = password('123456') where user in ('root','mysql');
这几行命令完成,root用户就有密码了,数据库这事就结束了。
但是报错了
提示很明白,mysql.user是个视图不是表。第一反应是叹口气,唉,静下心来查文档吧。
这个是原因文档:https://mariadb.com/kb/en/authentication-from-mariadb-10-4/
这个是解决方案文档:https://mariadb.com/kb/en/alter-user/
文档比较零碎,找出来方便查看。登录后的修改密码的方案是使用alter user,看了下mysql的教程也是这么干的。
解决命令:
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
推荐直接使用以下语句,权限和密码一次搞定
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
这时候远程连接访问还是会报错,请继续往下看
ERROR 1698 (28000): Access denied for user 'root'@'XXX'
之类的
7、远程客户端访问配置
要想远程访问需要给mysql配置下远程访问权限。首选cnf配置文件配置,可以永久生效。
参考这篇文章
mariadb启动完成后可能找不到数据库的配置文件,因为它就没有生成
执行以下命令可以查看到mariadb数据库读取哪些默认文件以及以何种顺序读取,以及当前使用的都是些什么参数配置
# mariadbd --help --verbose
不出意外会看到这个
所以我们可以在家目录下创建一个.my.cnf隐藏文件,然后写入配置信息
vim ~/.my.cnf
写入以下内容
[mysqld]
skip-networking = 0
skip-bind-address
保存后重新启动mariadb服务使配置生效
# systemctl restart mariadb.service
然后防火墙开放3306端口
firewall-cmd --add-port=3306/tcp
firewall-cmd --permanent --add-port=3306/tcp
然后远程客户端连接下数据库试试
参考:
https://mariadb.com/kb/en/installing-mariadb-binary-tarballs/
https://mariadb.com/kb/en/authentication-from-mariadb-10-4/
https://mariadb.com/kb/en/alter-user/
https://dba.stackexchange.com/questions/80232/mysql-cant-create-test-file-error-on-centos
https://mariadb.com/kb/en/configuring-mariadb-for-remote-client-access/