MariaDB二進制安裝及基本管理

本文旨在複習MariaDB二進制安裝以及基本管理mysql


基礎知識linux


一、MariaDB是MySQL原做者新做,開源社區維護,功能特性相較MySQL至少持平;web

二、採用新引擎XtraDB替代MySQL的InnoDB,較早版本5.1上的MySQL默認存儲引擎是MyISAM;sql

三、Xtradb在多核CPU上面的性能和伸縮性要更好;對於內存的分配和使用也要更好;也解除了InnoDB的不少限制;提供了比InnoDB更多的配置和性能監控參數。數據庫

四、數據庫備份常有冷備、溫備、熱備,M有ISAM是不支持熱備的,應該被淘汰了。windows

五、最新版本分爲5.10和5.5這2個大版本,本次實驗環境採用5.5.46安全


通用二進制安裝bash


MariaDB有3種安裝方式,rpm包、編譯、通用二進制安裝網絡

    1. RPM安裝:適合小環境,核心功能都具有,快速搭建環境;
ide

    2. 編譯安裝:比較推薦,複雜要求高,要有編譯環境,可指定幾乎全部選項;

    3. 通用二進制安裝:最推薦的方式,預先編譯過的,既避免了編譯的麻煩,又提供加強功能。


步驟1.下載二進制包,可根據自身平臺選擇

因爲我事先在windows中下載好了,這裏以共享的方式進行了掛載

mount -t cifs -o username=lance,password=rainbow //192.168.1.106/web /tmp/share
cp /tmp/share/mariadb-5.5.46-linux-x86_64.tar.gz /usr/local

步驟2.解壓安裝MariaDB到/usr/local路徑,並重命名爲mysql

cd /usr/local
tar -zxvf mariadb-5.5.46-linux-x86_64.tar.gz 
mv mariadb-5.5.46-linux-x86_64 mysql

步驟3.添加用戶和組[讓MySQL以mysql身份運行,避免安全風險]

groupadd mysql
useradd -g mysql mysql

步驟4.修改Mysql目錄的屬主、屬組,各級都遞歸[由於mysql運行時如建立數據庫等必須等工做目錄、數據庫目錄進行讀寫操做,因此必須確保擁有權限]

chown -R mysql:mysql /usr/local/mysql

步驟5.MariaDB的基本安裝已經完成,接下來須要修改配置文件、初始化

建立配置文件

cp -a /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? y

修改配置文件

vi /etc/my.cnf

wKiom1YsNSyzhJOpAAFZ934MhJ4941.jpg

在此處根據需求還能夠進行必定修改,如字符集設置、日誌文件設置、binlog文件設置等

請注意:datadir指定的數據庫目錄是否須要提早建立呢?

不建議提早建立,由於數據庫初始化的時候會以mysql用戶身份去建立,從此數據庫的操做也會同步讀寫到此目錄,而若以root身份提早建立了該目錄,可能因爲權限問題致使mysql沒法正常工做,切記!

步驟7.初始化MariaDB運行

/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mysql_data

步驟8.添加到開機啓動項

cp -a /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 2345 mysqld on

步驟9.啓動並測試連接

service mysqld start

注意:此時輸入mysql可能沒法鏈接,這是由於當前環境變量路徑中找不到mysql

echo "export PATH=/usr/local/mysql/bin:$PATH">>/etc/profile
source /etc/profile

wKioL1YsNqWDxup5AAJTAXS2s-A780.jpg


數據庫基本操做


建立數據庫

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_specification] ...

create_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

刪除數據庫

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

修改數據庫

ALTER {DATABASE | SCHEMA} [db_name]
    alter_specification ...
ALTER {DATABASE | SCHEMA} db_name
    UPGRADE DATA DIRECTORY NAME
alter_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

除此之外,經過SHOW命令能夠查看一些數據庫的公共屬性,總結以下:

SHOW DATABASES;                  --->查看數據庫列表;
SHOW CREATE DATABASE db_name;    --->查看指定數據庫的詳細信息;
SHOW CHARACTER SET;              --->查看MariaDB支持的字符集;
SHOW COLLATION;                  --->查看支持的字符集及默認排序規則;
SHOW VARIABLES;                  --->查看MariaDB全局變量;
HELP SHOW ;                      --->更多的信息可使用SHOW來查看;

例1:建立一個名爲lance的數據庫,若是不存在則建立,建立完成後,修改數據庫字符集爲GB2312

CREATE DATABASE IF NOT EXISTS lance;
SHOW CHARSET;
ALTER DATABASE lance CHARACTER SET=gb2312;

wKiom1YsOlqBqo8JAAGZ96Tinng323.jpg


表管理


建立表

CREATE TABLE [IF NOT EXISTS] tbl_name (col1 type1 dec1, col2 type2 dec2, ...)

刪除表

DROP TABLE

修改表

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
    [alter_specification [, alter_specification] ...]
    [partition_options]

查看錶的基本結構

DESC tbl_name
SHOW [FULL] TABLES [{FROM | IN} db_name]
     [LIKE 'pattern' | WHERE expr]

例2:使用剛纔的lance數據庫,建立一個表userinfo,要求以下

用戶ID userid,INT,自增,主鍵
姓名 username,定長,20
QQ號 qq,INT,12
Email mail,varchar(20)
use lance;
CREATE TABLE userinfo (userid INT UNSIGNED NOT NULL PRIMARY KEY,username CHAR(30) NOT NULL,qq INT UNSIGNED,mail VARCHAR(20));

wKioL1YsPpPD_UWSAAHvwdPwpgo216.jpg


索引管理


建立索引

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON tbl_name (index_col_name,...)

刪除索引

DROP INDEX index_name ON tbl_name

查看索引

SHOW INDEX FROM db_name.table_name

例3:在建立表userinfo的時候,字段userid指明瞭PRIMARY KEY,其實就是一種惟一鍵索引,這裏咱們再建立一個QQ號字段的索引,索引名爲qq;

CREATE UNIQUE INDEX qq ON userinfo(qq);

wKioL1YsQLqxJ9w6AAJyb96a7M4025.jpg


用戶管理


值得一提的是,MariaDB和MySQL的登錄機制很特殊,帳號驗證有2部分組成:身份信息+登錄主機,即咱們常見的'username'@'host' 這意味着輸入了正確的帳號密碼未必能成功登錄,必須在合法受權的主機上才能夠登錄。

此處,爲root設置密碼後,我使用ip地址來鏈接登錄,一探究竟;

wKioL1YsQi7SdaNUAAIYrsSs2m0721.jpg

顯然即使咱們輸入了正確的用戶名密碼,使用不一樣的鏈接主機也不必定能成功對嗎?這就涉及到接下來的用戶及權限管理問題了。

用戶帳號: 'username'@'host'

  host可以使用IP、網絡地址、使用通配符(_和%);

建立用戶帳號,並賦予密碼

CREATE USER 'username'@'host' IDENTIFIED BY [PASSWORD] 'password';

刪除用戶

DROP USER 'username'@'host';

查看用戶

SELECT host,user FROM mysql.user;

wKiom1YsRNngdCrxAAF8XSGV_B4628.jpg


權限管理


用戶鏈接進數據庫後,並不意味着他擁有全部庫的任何權限,這些權限是能夠細分的,好比A用戶對A庫有所有權限,B用戶對A庫只有只讀權限,等等,這就牽扯到受權、回收機制了。

也能夠受權給函數等等,若是用戶事先不存在,則建立此帳號並受權;

ALL [PRIVILEGES]:全部權限

受權:

GRANT priv1,... ON db_name.tbl_name TO 'username'@'host' [IDENTIFIED BY [PASSWORD] 'password'];

查看用戶已經得到的受權

SHOW GRANTS [FOR user]

收回受權

REVOKE priv1,... ON db_name.tbl_name FROM 'username'@'host';

例4:建立一個用戶,容許來自任何地方的鏈接,可是僅對數據庫lance有所有權限,對於其餘的數據庫無權限

CREATE USER 'onlylance'@'%' IDENTIFIED BY [PASSWORD] 'zxczxc';
GRANT ALL ON lance.* TO 'onlylance'@'%';

wKiom1YsRjmCUregAAHlhjPhZXQ827.jpg

wKioL1YsRnKzZvt4AAKVmLI64kk612.jpg

相關文章
相關標籤/搜索