Shawn's Blog
目录 · 9 节

Linux 下 MariaDB/MySql 的安装配置、用户管理和备份

0x00 MariaDB的身世

自从MySQL被Oracle收购之后,社区就一直担心MySQL可能会被闭源或者一些其他的原因导致MySQL的支持出现问题。所以现在好多发行版本默认的数据库都从MySQL转移到了Mariadb。而且社区也开始大力支持Mariadb,再加上Mariadb的使用和API和MySQL完全一样,所以这里选择使用Mariadb而不是MySQL。

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,10.0.9版起使用XtraDB(名称代号为Aria)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人麦克尔·维德纽斯主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自麦克尔·维德纽斯的女儿玛丽亚(英语:Maria)的名字。——————————维基百科

0X01 安装Mariadb

MariaDB是一组软件,如果只安装一部分的话后期扩展可能会出现问题,所以我们可以一次安装整个软件组

sh
1[root@iZ28jaak5nnZ ~]# yum groupinstall mariadb mariadb-client -y

安装需要一点时间,我们只需要等待安装结束。

0X02 打开Mariadb服务并配置防火墙

启动Mariadb服务。在CentOS7.x中推荐使用systemctl来配置服务的启动方式

sh
1systemctl start mariadb.service

配置防火墙,允许从MariaDB使用的3306端口监听,由于历史遗留问题,这里还是称之为MySql。

sh
1[root@iZ28jaak5nnZ ~]# firewall-cmd --add-service=mysql
2success
3[root@iZ28jaak5nnZ ~]# firewall-cmd --list-services
4dhcpv6-client mysql ssh

0X03 配置MariaDB的安全性

MariaDB提供了一个脚本来为新安装的MariaDB提升安全性。但是在使用这个脚本之前必须要先打开MariaDB服务。

sh
1[root@iZ28jaak5nnZ ~]# systemctl start mariadb
2[root@iZ28jaak5nnZ ~]# systemctl enable mariadb
3ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'

然后运行这个脚本,这个脚本会有几次提示:

  1. 询问当前密码,如果没设置密码就直接回车
  2. 设置root用户的密码
  3. 删除匿名用户(anonymous-user)
  4. 删除可以从外部登陆的root用户
  5. 删除test测试数据库
  6. 重载数据库
sh
1[root@iZ28jaak5nnZ ~]# mysql_secure_installation
2/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found
3
4NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
5      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
6
7In order to log into MariaDB to secure it, we'll need the current
8password for the root user.  If you've just installed MariaDB, and
9you haven't set the root password yet, the password will be blank,
10so you should just press enter here.
11
12Enter current password for root (enter for none):
13OK, successfully used password, moving on...
14
15Setting the root password ensures that nobody can log into the MariaDB
16root user without the proper authorisation.
17
18Set root password? [Y/n] y
19New password:
20Re-enter new password:
21Password updated successfully!
22Reloading privilege tables..
23 ... Success!
24
25
26By default, a MariaDB installation has an anonymous user, allowing anyone
27to log into MariaDB without having to have a user account created for
28them.  This is intended only for testing, and to make the installation
29go a bit smoother.  You should remove them before moving into a
30production environment.
31
32Remove anonymous users? [Y/n] y
33 ... Success!
34
35Normally, root should only be allowed to connect from 'localhost'.  This
36ensures that someone cannot guess at the root password from the network.
37
38Disallow root login remotely? [Y/n] y
39 ... Success!
40
41By default, MariaDB comes with a database named 'test' that anyone can
42access.  This is also intended only for testing, and should be removed
43before moving into a production environment.
44
45Remove test database and access to it? [Y/n] y
46 - Dropping test database...
47 ... Success!
48 - Removing privileges on test database...
49 ... Success!
50
51Reloading the privilege tables will ensure that all changes made so far
52will take effect immediately.
53
54Reload privilege tables now? [Y/n] y
55 ... Success!

0X04 登陆到MariaDB

配置好密码和接入点之后就可以登录到MariaDB了。使用mysql命令来登陆MariaDB。

sh
1[root@iZ28jaak5nnZ ~]# mysql -h localhost -u root -p
2Enter password:
3Welcome to the MariaDB monitor.  Commands end with ; or \g.
4Your MariaDB connection id is 12
5Server version: 5.5.50-MariaDB MariaDB Server
6
7Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
8
9Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
10
11MariaDB [(none)]>

参数:-h 指定主机, -u 指定用户, -p 指定密码 这三个参数都可以省略,当我们省略主机名的时候就默认登录到本地,当省略用户名的时候默认使用root,当省略密码的时候默认没有密码登陆

0X05 用户管理

在MariaDB中有用户的概念和权限的概念。用户名+密码+登陆地点,三个选项唯一确定一个用户,就比如同一个用户名shawn在10.13.1.2和在10.13.1.3的登陆密码可以是不同的,这在MariaDB里会分成两条来存储。

sh
1创建一个名为shawn的,从localhost登陆的,密码为test的用户
2MariaDB [(none)]> CREATE USER 'shawn'@'localhost' IDENTIFIED BY 'test';
3Query OK, 0 rows affected (0.00 sec)
4
5创建一个名为shawn_test的,任意地点,密码为6666的用户
6MariaDB [(none)]> CREATE USER 'shawn_test'@'%' IDENTIFIED BY '6666';
7Query OK, 0 rows affected (0.00 sec)

而且在MariaDB中用户和权限是分开的,如果只添加一个用户的话,这个用户是没有任何权限的。

删除用户的话是使用DROP命令

sh
1MariaDB [(none)]> DROP USER heiheihei@'localhost';
2Query OK, 0 rows affected (0.00 sec)

0X06 权限管理

登录到MariaDB之后可以给用户添加具体的权限,使用GRANT命令。

sh
1允许从localhost登陆的shawn对mysql数据库的user表执行查询
2MariaDB [(none)]> GRANT SELECT ON mysql.user to shawn@'localhost';
3Query OK, 0 rows affected (0.00 sec)
4
5允许从localhost登陆的shawn对mysql数据库的user表执行查询和插入
6MariaDB [(none)]> GRANT SELECT, INSERT ON mysql.user to shawn@'localhost';
7Query OK, 0 rows affected (0.00 sec)
8
9允许从localhost登陆的shawn对mysql数据库的user表执行增删查改四种操作
10MariaDB [(none)]> GRANT ALL ON mysql.user to shawn@'localhost';
11Query OK, 0 rows affected (0.00 sec)
12
13允许从localhost登陆的shawn对mysql数据库的所有表执行增删查改四种操作
14MariaDB [(none)]> GRANT ALL ON mysql.* to shawn@'localhost';
15Query OK, 0 rows affected (0.00 sec)
16
17允许从localhost登陆的shawn对所有库的所有表执行增删查改四种操作
18MariaDB [(none)]> GRANT ALL ON *.* to shawn@'localhost';
19Query OK, 0 rows affected (0.00 sec)
20
21允许从任意地点登陆的shawn对所有库的所有表执行增删查改四种操作
22MariaDB [(none)]> GRANT ALL ON *.* to shawn@'%';
23Query OK, 0 rows affected (0.00 sec)

使用REVOKE可以删除给定的权限,使用方法和GRANT是一样的,只是开头不同而已 使用FLUSH PRIVILEGES;可以刷新权限信息 使用SHOW GRANT FOR root@localhost可以查看某用户的权限信息

0X07 数据库备份

MariaDB有逻辑备份和物理备份两种备份方案,逻辑备份就是可以把表结构数据等导出成sql文件,而物理备份就是直接备份文件。 逻辑备份比较慢,因为要将备份的数据全部都查询一遍,但是可以不下线备份;物理备份比较快,但是需要下线备份。这里说的是逻辑备份.

sh
1[root@iZ28jaak5nnZ ~]# mysqldump -u root -h localhost -p --all-databases > backup.sql
2Enter password:

这里我使用了一个--all-databases的参数,是备份所有数据库,可选的参数有下面这几个

  1. --all-databases备份所有数据库
  2. --add-drop-tables生成的sql中包含drop tables语句,删除以前的table
  3. --no-data只生成库和表结构,没有数据
  4. --lock-all-tables在备份结束之前,锁定所有表,保证数据完整性
  5. --add-drop-databases生成的sql中包含drop database语句,删除以前的database

0X08 数据库还原

当我们有了一个备份出来的sql文件之后,可以将这个sql直接导入到数据库。这了的用法和之前登录到MariaDB的方法是一样的,只是将sql文件重定向过去就可以了

sh
1[root@iZ28jaak5nnZ ~]# mysql -u root -h localhost -p < backup.sql
2Enter password:
本文标题
Linux 下 MariaDB/MySql 的安装配置、用户管理和备份
文章作者
Shawn
版权声明
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

如果这篇文章对你有帮助,可以请我喝杯咖啡 ☕

评论