??當(dāng)MySQL被Oracle收購(gòu)以后,MySQL的未來(lái)充滿了不確定性〕婀。縱觀Oracle歷史,簡(jiǎn)直是閉源收割機(jī)圃验。Oracale收購(gòu)Sun公司以后與Google打了N年官司掉伏。之前的Sun公司有兩款JDK:SunJDK擁有版權(quán)但是免費(fèi),OpenJDK開(kāi)源且免費(fèi)澳窑。這個(gè)鍋能不能甩到Google身上就看安卓有沒(méi)有使用SunJDK斧散。而 Google 也覺(jué)得自己很委屈畢竟安卓完全開(kāi)源。后來(lái)Google 誓要把 Java 從安卓陣營(yíng)中剔除出去照捡,而OracleJDK(前身是SunJDK)也走向了收費(fèi)模式。
??數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)的重要性不言而喻话侧,鑒于Oracle之前很多騷操作栗精,為了避免閉源的風(fēng)險(xiǎn),社區(qū)產(chǎn)生了多個(gè)MySQL的分支瞻鹏,Mariadb與Percona是當(dāng)前兩個(gè)受歡迎的分支悲立。
??這里簡(jiǎn)單說(shuō)一下Mariadb的淵源。MySQL之父Monty創(chuàng)立了MySQL后將其賣給Sun新博,結(jié)果Sun又轉(zhuǎn)手賣給Oracle薪夕,Monty也知道Oracle不靠譜,憤而出走創(chuàng)立了MariaDB分支赫悄。從某種程度來(lái)說(shuō)MariaDB可能才是原汁原味原献。關(guān)于MariaDB名字的由來(lái)馏慨,MySQL的My并不是“我的”意思。My其實(shí)是Monty的大女兒姑隅,Maria是Monty的小女兒写隶,Monty還有一個(gè)兒子Max,所以還有一個(gè)MaxDB讲仰。
Mariadb某個(gè)版本可能只是有限兼容慕趴、實(shí)現(xiàn)了MySQL一個(gè)版本的某些功能,如果遇到問(wèn)題可以去官網(wǎng)詳查下
https://mariadb.com/kb/en/mariadb-vs-mysql-features/
Mysql 和 Mariadb 簡(jiǎn)單的版本兼容鄙陡、對(duì)應(yīng)關(guān)系:
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 |
對(duì)應(yīng)關(guān)系比較重要冕房,不然可能出現(xiàn)一些問(wèn)題。比如sql語(yǔ)句的datetime類型使用錯(cuò)誤會(huì)建表失敗趁矾,比如在Web項(xiàng)目中使用mysql的jdbc.driver連接耙册,pom.xml里要選擇合適的版本,否則會(huì)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
啟動(dòng)MariaDB服務(wù)并設(shè)置為開(kāi)機(jī)自啟
systemctl start mariadb
systemctl enable mariadb
使用MariaDB安全配置向?qū)?/p>
mysql_secure_installation 或者 mariadb-secure-installation
配置時(shí)出現(xiàn)的各個(gè)選項(xiàng)
Enter current password for root (enter for none): # (輸入數(shù)據(jù)庫(kù)root密碼,第一次進(jìn)入還沒(méi)有設(shè)置密碼則直接回車)
Switch to unix_socket authentication [Y/n]: # n (不使用unix_socket)
Set root password? [Y/n]: # y(root用戶設(shè)置密碼)
New password: # (新密碼)
Re-enter new password: # (再次輸入密碼)
Remove anonymous users? [Y/n]: # y (移除匿名用戶)
Disallow root login remotely? [Y/n]:# y (拒絕root遠(yuǎn)程登錄牌柄,不管y/n畸悬,都會(huì)拒絕root遠(yuǎn)程登錄)
Remove test database and access to it? [Y/n]: # y (刪除test數(shù)據(jù)庫(kù))
Reload privilege tables now? [Y/n]: # y (重新加載權(quán)限表∩河叮或者重啟服務(wù)也許)
三蹋宦、登錄MariaDB
mysql -u root -p
Enter password:
1、修改MariaDB默認(rèn)編碼
MariaDB的默認(rèn)編碼是latin1咒锻,插入中文會(huì)亂碼冷冗,需要將編碼改為utf8。首先查看當(dāng)前字符集編碼惑艇。
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]
標(biāo)簽下添加內(nèi)容:
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]
標(biāo)簽下添加內(nèi)容:
vim /etc/my.cnf.d/client.cnf
[client]
default-character-set=utf8
- 編輯文件
/etc/my.cnf.d/mysql-clients.cnf
, 在[mysql]
標(biāo)簽下添加內(nèi)容:
vim /etc/my.cnf.d/mysql-clients.cnf
[mysql]
default-character-set=utf8
- 重啟Mariadb
systemctl restart mariadb
- 查看字符集修改結(jié)果
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遠(yuǎn)程訪問(wèn)
- 查詢賬號(hào)信息可以看到root賬號(hào)拒絕了遠(yuǎn)程訪問(wèn),localhost表示該賬號(hào)只能進(jìn)行本地登錄
MariaDB [(none)]> use mysql;
MariaDB [mysql]> select host,user,password from user;
+-----------+-------+-------------------------------------------+
| Host | User | Password |
+-----------+-------+-------------------------------------------+
| localhost | root | *BEDF7627BC4D9FBFF77B8DEAF6AD116AF6B202AC |
| localhost | mysql | invalid |
+-----------+-------+-------------------------------------------+
- 修改訪問(wèn)權(quán)限
"%"
代表所有IP滨巴,任何客戶機(jī)都可以連接
localhost
代表只可以本機(jī)連接
%
代表所有IP思灌,至于是否已經(jīng)包括localhost
,各個(gè)數(shù)據(jù)庫(kù)版本也不一樣
版本 | %是否包括localhost |
---|---|
MySQL8.0 | 包括 |
MySQL5.7 | 包括 |
MySQL5.6 | 不包括 |
MySQL5.1 | 不包括 |
MariaDB 10.3 | 不包括 |
訪問(wèn)權(quán)限為localhost的root賬號(hào)不要?jiǎng)庸。灰獎(jiǎng)犹┏ィ灰獎(jiǎng)?/code>。
我這里專門講%
是否包括localhost
的事情蜈垮,是因?yàn)槲以?jīng)有一個(gè)掉坑里的故事耗跛。我有一次直接把root賬戶的localhost
改為了%
裕照。比如下面這種:
MariaDB [mysql]> update user set host = '%' where user = 'root';
MariaDB [mysql]> select user,host from user;
+-------+-----------+
| User | Host |
+-------+-----------+
| root | % |
| mysql | localhost |
+-------+-----------+
其結(jié)果是,因?yàn)槟承┪胰f(wàn)萬(wàn)沒(méi)有想到的原因课兄,遠(yuǎn)程無(wú)法訪問(wèn)數(shù)據(jù)庫(kù)了牍氛。而當(dāng)我登錄服務(wù)器想本地登錄數(shù)據(jù)庫(kù)的時(shí)候,我發(fā)現(xiàn)%
是不包括localhost
的烟阐。我整個(gè)人都傻掉了搬俊,數(shù)據(jù)庫(kù)無(wú)法遠(yuǎn)程登錄也無(wú)法本地登錄。后面解決辦法是使用了匿名登錄和跳過(guò)權(quán)限驗(yàn)證進(jìn)去了蜒茄。
所以上面是一個(gè)錯(cuò)誤示范唉擂,正確的方法應(yīng)該是insert新用戶,而不是update檀葛。
下面使用權(quán)限命令新建用戶:
MariaDB [mysql]> Grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
MariaDB [mysql]> flush privileges;
identified by 后面是賬戶遠(yuǎn)程登錄的密碼玩祟。
這里需要說(shuō)明一下,不要被迷惑屿聋,雖然看上去是同為root賬戶空扎,但其實(shí)是是獨(dú)立的兩個(gè)賬戶 root@localhost 與 root@%
MariaDB [mysql]> select user,host,password from user;
+-------+-----------+-------------------------------------------+
| User | Host | Password |
+-------+-----------+-------------------------------------------+
| root | localhost | *BEDF7627BC4D9FBFF77B8DEAF6AD116AF6B202AC |
| mysql | localhost | invalid |
| root | % | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------+-----------+-------------------------------------------+
它等價(jià)于新建一個(gè)用戶并添加訪問(wèn)權(quán)限。
#新建用戶yao
MariaDB [mysql]> create user 'yao'@'localhost' identified by '123';
#給yao用戶賦權(quán)
MariaDB [mysql]> grant all privileges on `yao`.* to 'yao'@'localhost';
MariaDB [mysql]> flush privileges;
- 避免防火墻攔截遠(yuǎn)程登錄
- 關(guān)閉防火墻:
systemctl stop firewalld #停止firewall
systemctl disable firewalld #禁止firewall開(kāi)機(jī)啟動(dòng)
- 開(kāi)放防火墻端口润讥,開(kāi)啟3306端口,開(kāi)啟后要重啟防火墻:
firewall-cmd --query-port=3306/tcp # 查看3306端口是否開(kāi)啟
firewall-cmd --zone=public --add-port=3306/tcp --permanent #開(kāi)啟3306端口
firewall-cmd --reload # 重啟防火墻
firewall-cmd --query-port=3306/tcp # 查看3306端口是否開(kāi)啟
3. 如果想修改root賬號(hào)密碼
MariaDB [(none)]> SET password for 'root'@'localhost'=password('newpassword');
MariaDB [(none)]> exit;