mariadb 的由來
MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL授權許可。開發這個分支的原因之一是:甲骨文公司收購了MySQL後,有將MySQL閉源的潛在風險,因此社區採用分支的方式來避開這個風險。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕鬆成爲MySQL的代替品。Red Hat Enterprise Linux/CentOS 7.0 發行版已將默認的數據庫從 MySQL 切換到 MariaDB。
mariadb-server 與連接器
進入 mariadb 的官網下載鏈接 https://mariadb.org/download/
我翻譯一下:
- MariaDB Server 是世界上最流行的開源關係數據庫之一,並且在主流 Linux 發行版的標準倉庫中都有。可以使用操作系統的包管理器查找 mariadb-server。或者,您也可也使用如下資源
- MariaDB 基金會爲 MariaDB Server 也提供了最流行的連接器,以供下載。
mariadb 的卸載
我這邊之前已經手動安裝過 mariadb 了。這裏爲了演示安裝,需要用 rpm 命令進行卸載。
rpm 常用參數
- -a 查詢所有文件
- -e 卸載
- -i 安裝
- -q 查詢
- -u 升級
- -h 顯示安裝進度
- -R 查看依賴
- –replacepkgs 重新安裝rpm包
- –percent 在軟件安裝時顯示百分比
開始使用 rpm -e mariadb
卸載 mariadb,提示說 mariadb-server 依賴於 mariadb。
因此需要先卸載 mariadb-server,再卸載 mariadb。
可以使用 rpm -qR mariadb-server
查看依賴
使用 rpm -q mariadb
查詢,可以發現該卸載的均已卸載完畢了。
安裝 mariadb
老規矩,先用 Putty 連接虛擬機中的 centos
使用命令 ip addr | grep inet
查看 ip,然後使用 PuTTY 連接
輸入 yum install -y mariadb-server
安裝 mariadb-server,它會自動安裝其依賴的 mariadb
mariadb 的啓停命令
-
啓動服務
systemctl start mariadb
或service mariadb start
-
停止服務
systemctl stop mariadb
或service mariadb stop
-
重啓服務
systemctl restart mariadb
或service mariadb restart
-
添加到開機啓動
systemctl enable mariadb
或chkconfig mariadb on
-
設置密碼
mysqladmin -u root password 'xxxxxx'
-
安全設置,以及修改數據庫管理員密碼
mysql_secure_installation
配置 mariadb
安裝完後 mariadb,接下來就要設置賬號密碼了。
如果使用 mysqladmin -u root password 'xxxxxxx'
或 mysql_secure_installation 來配置報瞭如下錯誤,原因就是服務沒開啓。
輸入 systemctl start mariadb
或 service mariadb start
啓動服務,然後輸入 mysql_secure_installation
配置密碼。
mysql_secure_installation
-
第一次要求輸入密碼,直接回車
Enter current password for root (enter for none) -
第二次纔是設置 root 密碼
Set root password? [Y/n]
New Password
Re-enter new password -
是否刪除匿名用戶。Y或回車
Remove anonymous users? [Y/n] -
是否禁止 root 遠程登錄。我這邊在本地測試,安全性要求不高,因此我選 n
Disallow root login remotely? [Y/n] -
是否刪除數據庫。Y或回車
Remove test databse and access to it? [Y/n] -
重新加載權限表。Y或回車
Reload privilege tables now? [Y/n]
啓動 mariadb
mysql -uroot -p<password>
注意:-u和用戶名、-p和密碼之間均沒有空格
最後鍵入 exit
(帶不帶分號均可),即可正常退出。
配置字符集
進入 maridb 命令行後,鍵入 show variables like "character";show variables like "%collection%"
查看字符集
vi /etc/my.cnf
在 [mysqld] 標籤下添加
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
vi /etc/my.cnf.d/client.cnf
在 [client] 中添加
default-character-set=utf8
vi /etc/my.cnf.d/mysql-clients.cnf
在 [mysql] 中添加
default-character-set=utf8
全部配置完後,重啓 mariadb
service mariadb restart
,這個命令會被重定向到 /bin/systemctl restart mariadb.service
重啓完,還是跟之前一樣,進入 mariadb:mysql -uroot -p<password>
友情提示: 我之前打錯命令,把 -uroot 打成 -rroot,結果出現 Ignoring query to other database 錯誤。所以如果出現該錯誤,請檢查登錄命令是否正確
重新輸入 show variables like "%character%";show variables like "%collation%;"
查看字符集,可以發現現在基本都統一成了utf8了。
添加用戶,設置權限
查看當前主機、用戶、密碼的哈希值
show database;
use mysql;
select host,user,password from user;
授權
grant <權限名數組 或 all privileges> on <數據庫名>.<表名> to <用戶名>@<允許的IP> identified by "<密碼>";
flush privileges;
flush privileges
命令用來刷新權限,否則修改可能不生效。
使用 show grants for '<用戶名>'
可以查看授權時執行的命令
權限組有以下幾種類型,可以用逗號隔開
- 數據庫管理權限
權限名 | 權限所允許的操作 |
---|---|
CREATE USER | |
FILE | |
GRANT OPTION | |
- 數據庫對象操作權限
權限名 | 權限所允許的操作 |
---|---|
ALTER | |
ALTER ROUTINE | |
CREATE | |
CREATE ROUTINE | |
CREATE TEMPORARY TABLE | |
CREATE VIEW | |
DELETE | |
DROP | |
EVENT | |
EXECUTE | |
INDEX | |
INSERT | |
LOCK TABLE | |
PEFERENCE | |
SELECT | |
SHOW VIEW | |
TRGGER | |
UPDATE |
- 其它權限
權限名 | 權限所允許的操作 |
---|---|
ALL [PRIVILEGES] | 所有操作權限(但不包含GRANT) |
USAGE | 一個特殊的“無權限” |
<數據庫名>.<表名>表示授予權限的具體數據庫或表
db.table | 含義 |
---|---|
. | 授予該數據庫服務器中所有數據庫的權限 |
db.* | 授予db數據庫中所有表的權限 |
db.table | 授予數據庫db中table表的權限 |
允許用戶登錄的IP
host | 含義 |
---|---|
localhost | 只允許該用戶在本地登錄,不能遠程登錄 |
% | 允許在除本機之外的任何一臺機器遠程登錄 |
192.168.1.1 | 具體IP表示僅允許用戶從該特定的IP登錄 |
刷新權限更變
flush privileges
創建用戶
創建用戶 create <用戶名> identified by '<password>'
查詢之前創建的用戶 select user,host,password from mysql.user where user="<用戶名>"
修改密碼
update mysql.user set password = password('<密碼>') where user = '用戶名' and host = ‘%’;
flush privileges;
刪除用戶
drop user <用戶名>@'%;'
該命令會刪除用戶以及對應的權限。執行完後,你會發現 mysql.user 表中的用戶,以及 mysql.db 表中的權限記錄都消失了。
數據庫的備份與恢復
首先進入數據庫 mysql -uroot -p<password>
,創建一個測試數據庫並填充數據
MariaDB [(none)]>create database test;
MariaDB [(none)]>use test;
MariaDB [(none)]>create table book(name char(20), author char(20));
MariaDB [(none)]>insert into book values('相對論', '愛因斯坦');
MariaDB [(none)]>insert into book values('愛情公寓', '韋正');
MariaDB [(none)]>select * from book;
備份
從 mariadb 的命令行,退出到 centos 命令行。
執行 mysqldump -u root -p --all-databases > /tmp/db.dump
將數據庫備份到 /tmp.dump 中。
恢復的2種方法
備份後進入 mariadb 命令行,刪除之前創建的 test 數據庫。
[root@localhost ~]# mysql -u root -p
Mariadb [(none)] > drop database test
Mariadb [(none)] > show databases
此時執行 source /tmp/db.dump
即可恢復數據庫了
如果不在 mariadb 命令行中,也可以直接使用 mysql -uroot -p < /tmp/db.dump
命令進行恢復(從外部恢復,不會有任何回顯)