CentOS 7 安装 MariaDB 10

  当MySQL被Oracle收购以后,MySQL的未来充满了不确定性。纵观Oracle历史,简直是闭源收割机。Oracale收购Sun公司以后与Google打了N年官司。之前的Sun公司有两款JDK:SunJDK拥有版权但是免费,OpenJDK开源且免费。这个锅能不能甩到Google身上就看安卓有没有使用SunJDK。而 Google 也觉得自己很委屈毕竟安卓完全开源。后来Google 誓要把 Java 从安卓阵营中剔除出去,而OracleJDK(前身是SunJDK)也走向了收费模式。
  数据库数据库的重要性不言而喻,鉴于Oracle之前很多骚操作,为了避免闭源的风险,社区产生了多个MySQL的分支,Mariadb与Percona是当前两个受欢迎的分支。
  这里简单说一下Mariadb的渊源。MySQL之父Monty创立了MySQL后将其卖给Sun,结果Sun又转手卖给Oracle,Monty也知道Oracle不靠谱,愤而出走创立了MariaDB分支。从某种程度来说MariaDB可能才是原汁原味。关于MariaDB名字的由来,MySQL的My并不是“我的”意思。My其实是Monty的大女儿,Maria是Monty的小女儿,Monty还有一个儿子Max,所以还有一个MaxDB。

Mariadb某个版本可能只是有限兼容、实现了MySQL一个版本的某些功能,如果遇到问题可以去官网详查下
https://mariadb.com/kb/en/mariadb-vs-mysql-features/
Mysql 和 Mariadb 简单的版本兼容、对应关系:

Mariadb Mysql
10.4~10.5 8.0
10.2~10.3 5.7
10.0~10.1 5.6
5.5 5.5
5.1~5.3 5.1

对应关系比较重要,不然可能出现一些问题。比如sql语句的datetime类型使用错误会建表失败,比如在Web项目中使用mysql的jdbc.driver连接,pom.xml里要选择合适的版本,否则会jdbc连接失败等等。

一、新建repo源

cd /etc/yum.repos.d
vim Mariadb.repo

在 Mariadb.repo下添加镜像地址,为了下载速度快些,这里使用了阿里云镜像

[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.4/centos7-amd64
gpgkey = https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1

二、安装Mariadb

yum install MariaDB-server

启动MariaDB服务并设置为开机自启

systemctl start mariadb
systemctl enable mariadb

使用MariaDB安全配置向导

mysql_secure_installation 或者 mariadb-secure-installation

配置时出现的各个选项

Enter current password for root (enter for none): # (输入数据库root密码,第一次进入还没有设置密码则直接回车)
Switch to unix_socket authentication [Y/n]: # n (不使用unix_socket)
Set root password? [Y/n]: # y(root用户设置密码)
New password: # (新密码)
Re-enter new password: # (再次输入密码)
Remove anonymous users? [Y/n]: # y (移除匿名用户) 
Disallow root login remotely? [Y/n]:# y (拒绝root远程登录,不管y/n,都会拒绝root远程登录)
Remove test database and access to it? [Y/n]: # y (删除test数据库)
Reload privilege tables now? [Y/n]: # y (重新加载权限表。或者重启服务也许)

三、登录MariaDB

mysql -u root -p
Enter password:
1、修改MariaDB默认编码

MariaDB的默认编码是latin1,插入中文会乱码,需要将编码改为utf8。首先查看当前字符集编码。

MariaDB [(none)]> show variables where variable_name  like "%character%" or variable_name like "%collation%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | utf8_general_ci            |
| collation_database       | latin1_swedish_ci          |
| collation_server         | latin1_swedish_ci          |
+--------------------------+----------------------------+
  • 编辑文件/etc/my.cnf, 在[mysqld][mysqld_safe]标签下添加内容:
vim /etc/my.cnf

[mysqld]
init_connect = 'SET collation_connection = utf8_general_ci'
init_connect = 'SET NAMES utf8'
character_set_server = utf8
collation_server = utf8_general_ci
skip-character-set-client-handshake
[mysqld_safe]
init_connect = 'SET collation_connection = utf8_general_ci'
init_connect = 'SET NAMES utf8'
character_set_server = utf8
collation_server = utf8_general_ci
skip-character-set-client-handshake
  • 编辑文件/etc/my.cnf.d/client.cnf, 在[client]标签下添加内容:
vim /etc/my.cnf.d/client.cnf

[client]
default-character-set=utf8
  • 编辑文件/etc/my.cnf.d/mysql-clients.cnf, 在[mysql]标签下添加内容:
vim /etc/my.cnf.d/mysql-clients.cnf

[mysql]
default-character-set=utf8
  • 重启Mariadb
systemctl restart mariadb
  • 查看字符集修改结果
MariaDB [(none)]> show variables where variable_name  like "%character%" or variable_name like "%collation%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | utf8_general_ci            |
| collation_database       | utf8_general_ci            |
| collation_server         | utf8_general_ci            |
+--------------------------+----------------------------+
2、配置root远程访问
  • 查询账号信息可以看到root账号拒绝了远程访问,localhost表示该账号只能进行本地登录
MariaDB [(none)]> use mysql;
MariaDB [mysql]> select host,user,password from user;
+-----------+-------+-------------------------------------------+
| Host      | User  | Password                                  |
+-----------+-------+-------------------------------------------+
| localhost | root  | *BEDF7627BC4D9FBFF77B8DEAF6AD116AF6B202AC |
| localhost | mysql | invalid                                   |
+-----------+-------+-------------------------------------------+
  • 修改访问权限
    "%"代表所有IP,任何客户机都可以连接
    localhost代表只可以本机连接
    %代表所有IP,至于是否已经包括localhost,各个数据库版本也不一样
版本 %是否包括localhost
MySQL8.0 包括
MySQL5.7 包括
MySQL5.6 不包括
MySQL5.1 不包括
MariaDB 10.3 不包括

访问权限为localhost的root账号不要动,不要动,不要动
我这里专门讲%是否包括localhost的事情,是因为我曾经有一个掉坑里的故事。我有一次直接把root账户的localhost改为了%。比如下面这种:

MariaDB [mysql]> update user set host = '%' where user = 'root';

MariaDB [mysql]> select user,host from user;
+-------+-----------+
| User  | Host      |
+-------+-----------+
| root  | %         |
| mysql | localhost |
+-------+-----------+

其结果是,因为某些我万万没有想到的原因,远程无法访问数据库了。而当我登录服务器想本地登录数据库的时候,我发现%是不包括localhost的。我整个人都傻掉了,数据库无法远程登录也无法本地登录。后面解决办法是使用了匿名登录和跳过权限验证进去了。

所以上面是一个错误示范,正确的方法应该是insert新用户,而不是update。
下面使用权限命令新建用户:

MariaDB [mysql]> Grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
MariaDB [mysql]> flush privileges;

identified by 后面是账户远程登录的密码。
这里需要说明一下,不要被迷惑,虽然看上去是同为root账户,但其实是是独立的两个账户 root@localhost 与 root@%

MariaDB [mysql]> select user,host,password from user;
+-------+-----------+-------------------------------------------+
| User  | Host      | Password                                  |
+-------+-----------+-------------------------------------------+
| root  | localhost | *BEDF7627BC4D9FBFF77B8DEAF6AD116AF6B202AC |
| mysql | localhost | invalid                                   |
| root  | %         | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------+-----------+-------------------------------------------+

它等价于新建一个用户并添加访问权限。

#新建用户yao
MariaDB [mysql]> create user 'yao'@'localhost' identified by '123';
#给yao用户赋权
MariaDB [mysql]> grant all privileges on `yao`.* to 'yao'@'localhost';
MariaDB [mysql]> flush privileges;
  • 避免防火墙拦截远程登录
  1. 关闭防火墙:
systemctl stop firewalld            #停止firewall
systemctl disable firewalld         #禁止firewall开机启动
  1. 开放防火墙端口,开启3306端口,开启后要重启防火墙:
firewall-cmd --query-port=3306/tcp  # 查看3306端口是否开启
firewall-cmd --zone=public --add-port=3306/tcp --permanent  #开启3306端口
firewall-cmd --reload  # 重启防火墙
firewall-cmd --query-port=3306/tcp  # 查看3306端口是否开启
3. 如果想修改root账号密码
MariaDB [(none)]> SET password for 'root'@'localhost'=password('newpassword');
MariaDB [(none)]> exit;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容