本文旨在複習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
在此處根據需求還能夠進行必定修改,如字符集設置、日誌文件設置、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
數據庫基本操做
建立數據庫
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;
表管理
建立表
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 |
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));
索引管理
建立索引
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);
用戶管理
值得一提的是,MariaDB和MySQL的登錄機制很特殊,帳號驗證有2部分組成:身份信息+登錄主機,即咱們常見的'username'@'host' 這意味着輸入了正確的帳號密碼未必能成功登錄,必須在合法受權的主機上才能夠登錄。
此處,爲root設置密碼後,我使用ip地址來鏈接登錄,一探究竟;
顯然即使咱們輸入了正確的用戶名密碼,使用不一樣的鏈接主機也不必定能成功對嗎?這就涉及到接下來的用戶及權限管理問題了。
用戶帳號: 'username'@'host'
host可以使用IP、網絡地址、使用通配符(_和%);
建立用戶帳號,並賦予密碼
CREATE USER 'username'@'host' IDENTIFIED BY [PASSWORD] 'password';
刪除用戶
DROP USER 'username'@'host';
查看用戶
SELECT host,user FROM mysql.user;
權限管理
用戶鏈接進數據庫後,並不意味着他擁有全部庫的任何權限,這些權限是能夠細分的,好比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'@'%';