環境:html
簡介:mysql
MariaDB的優勢:sql
查看是否安裝MariaDB rpm包:
rpm -qa | grep MariaDB
數據庫
在 CentOS 7.4 默認源中的 MariaDB 仍爲5.x版本,當須要 10.x 版本時,可經過添加第三方源實現:centos
MariaDB 官方源:緩存
echo -e "[MariaDB]\nname = MariaDB\nbaseurl = http://yum.MariaDB.org/10.3/centos7-amd64\ngpgkey=https://yum.MariaDB.org/RPM-GPG-KEY-MariaDB\ngpgcheck=1" > /etc/yum.repos.d/MariaDB-10.3.repo
官方源比較慢的狀況,可使用清華鏡像源(根據須要執行yum clean all):安全
echo -e "[MariaDB]\nname = MariaDB\nbaseurl = https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.3.9/yum/centos/7.4/x86_64/\ngpgkey=https://yum.MariaDB.org/RPM-GPG-KEY-MariaDB\ngpgcheck=1" > /etc/yum.repos.d/MariaDB-10.3.repo
安裝MariaDB客戶端(包含MariaDB-common、MariaDB-client下載9MB 安裝50M):
yum install -y MariaDB.x86_64
服務器
安裝MariaDB服務端(包含MariaDB-common、MariaDB-client、MariaDB-server):
yum install -y MariaDB-server.x86_64
session
查看 MariaDB 安裝的文件:
rpm -ql MariaDB-server
或 rpm -ql MariaDB-client
多線程
目錄文件 | 說明 |
---|---|
/etc/my.cnf |
默認配置文件 |
/var/lib/mysql/ |
文件夾下是 MariaDB 數據庫目錄、錯誤日誌和 socket 文件 |
mysql |
mysql cli 客戶端 |
mysqldump |
備份工具,基於 mysql協議 向 mysqld 發起查詢,將結果轉化爲insert語句導出。 |
mysqladmin |
基於 mysql協議 管理 mysqld。 |
mysqlimport |
mysql 導入工具 |
注意:
啓動MariaDB服務:
service mariadb start
初始化(爲root設置密碼,刪除測試數據庫、匿名用戶):
/usr/bin/mysql_secure_installation
登陸mysql查看版本:
mysqladmin version -p123123
一鍵卸載MariaDB且清除MariaDB數據(便於調試):
yum -y remove `rpm -qa | grep MariaDB` && rm -rf /var/lib/mysql
容許root遠程訪問:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123123' WITH GRANT OPTION;
精確到列的權限:
GRANT SELECT(Id,Name) ON testdb.Users TO testuser@'%' IDENTIFIED BY '123123'
重載受權表:
FLUSH PRIVILEGES;
忘記root密碼:
MySQL按照標準SQL定義了4種隔離級別,較低的隔離級別,能帶來更高的併發和更低的系統開銷。
select ... for update
備註:
set tx_isolation='READ-UNCOMMITTED';
調整當前 session 隔離級別select @@tx_isolation
查看當前 session 隔離級別show processlist;
查看 mysql 鏈接狀態在4種隔離級別中又分別存在不一樣的讀問題:
T1:select * from users where id = 1; T2:insert into `users`(`id`, `name`) values (1, 'foo'); -- 事務未提交 T1:select * from users where id = 1; -- 會讀到
T1:select * from users where id = 2; T2:insert into `users`(`id`, `name`) values (2, 'foo'); T2:commit; T1:select * from users where id = 2; -- 會讀到
T1:select * from users where id = 3; -- 判斷是否有 Id = 3 的數據,沒有則插入 T2:insert into `users`(`id`, `name`) values (3, 'bar'); -- 執行成功 T1:insert into `users`(`id`, `name`) values (3, 'bar'); -- 執行失敗,因爲 T1 發生幻讀,不能支持該業務執行
T1:select * from users where id = 3; T2:update `users` set `name` = 'baz' where `id` = 3; -- 執行失敗,因爲 Id = 3 的數據被鎖
注意:
在同1次鏈接上,上次事務未提交,執行 start transaction;
。會自動提交該鏈接上次的修改。
在 MVCC 以前,RC 和 RR 隔離級別是怎麼工做?
在 MVCC 以前,是單純依賴鎖的機制實現隔離級別。
當T1修改1條數據時加上排他鎖,T2事務的讀操做會被阻塞。當T1提交或回滾,鎖被釋放時,才能讀取到提交的數據。但通常應用都是讀多寫少,致使系統處於大量的等待中,很是低效。
有了 MVCC 機制後,效果是怎麼樣?
有了 MVCC 後,當數據被修改時,會生成1個副本出來供其餘事務讀取。不會出現阻塞狀況,讀的性能會大幅提高。只有 SERIALIZABLE 級別的讀操做纔有可能被阻塞。(MVCC應用在RC和RR隔離級別上)
MVCC 具體如何實現的?
undo log:記錄了原始數據的多個副本,用來回滾和提供其餘事務讀取
readview:記錄了活動事務Id,用來肯定可見哪一個副本
事務提交過程及日誌變化:
commit:
注意:
主從複製能提供水平擴展 數據備份 數據分析 高可用性等,故開啓主從複製愈來愈必要。
MariaDB 主從複製工做3步:
配置複製:
配置主服務器:
[mysqld] log_bin = mysql-bin server_id = 1 # 惟一,能夠用IP地址的末幾位
從服務器:
[mysqld] log_bin = mysql-bin server_id = 2 log_slave_updates = 1 # 重放同時寫到binlog relay_log = /var/lib/mysql/mysql-relay-bin
注意:
SHOW MASTER STATUS\G
查看stop slave; reset slave;
默認複製是單向異步的,也支持半同步複製功能(MariaDB 10.3 後內置不須要單獨安裝插件)。
set global rpl_semi_sync_master_enabled = 1;
set global rpl_semi_sync_master_wait_point = AFTER_SYNC;
set global rpl_semi_sync_slave_enabled = 1;
semi配置:
配置項|推薦配置值|說明
rpl_semi_sync_master_enabled|ON|開啓主庫半同步複製
rpl_semi_sync_master_timeout|10000|最多等待從庫響應10s
rpl_semi_sync_master_wait_no_slave|ON|當沒有從節點時(從節點忽然斷開)是否繼續等待
rpl_semi_sync_master_wait_point|AFTER_SYNC|控制Wait Slave ACK的時機
rpl_semi_sync_slave_enabled|ON|開啓從庫半同步複製
原理:
至關於有異步複製、半同步複製還有個全同步複製,表明爲 mysql-cluster性能太差,須要等待全部slave都同步才commit成功(性能太差)
注意:
從MariaDB 10.0.2開始,GTID會自動啓用,在 binlog 中的每一個事件組(事務)都會先記錄1個GTID。
全局事務ID(簡稱GTID)由三個用短劃線「 - 」分隔的數字組成。例如:0-1-10
爲何要使用GTID:
如何配置:
CHANGE MASTER TO master_use_gtid = { slave_pos | current_pos | no }
完整:CHANGE MASTER TO master_host = "127.0.0.1", master_user = "root", master_use_gtid = current_pos;
select @@gtid_slave_pos 可查看slave最後1個gtid。
select @@gtid_current_pos 可查看當前服務器執行的最後1個gtid。
注意:
在MariaDB 5.5和MariaDB 10.0中,MariaDB Galera Server是一個獨立的軟件包,而不是標準的MariaDB Server軟件包。從MariaDB 10.1開始,MariaDB Server和MariaDB Galera Server軟件包已經合併,而且在安裝MariaDB時會自動安裝Galera軟件包及其依賴項。Galera部件在配置以前保持休眠狀態,如插件或存儲引擎。
相比於複製、半同步複製,Galera集羣至關因而同步複製。其實現原理徹底與 binlog 沒有任何關係。
配置步驟:
ini [galera] # Mandatory settings wsrep_on=ON # rpm -ql galera.x86_64 -> /usr/lib64/galera/libgalera_smm.so wsrep_provider=/usr/lib64/galera/libgalera_smm.so # DNS名稱也有效,IP是性能的首選 wsrep_cluster_address="gcomm://172.17.145.110, 172.18.0.2" binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2
注意:
命令 | 說明 |
---|---|
mysqld --verbose --help | less |
查看默認配置及配置說明 |
cat /etc/my.cnf | grep -v '^#' | grep -v '^$' |
查看去除註釋後的配置文件 |
show [global] variables; |
查看配置 |
set [global] name=value; |
修改配置 |
配置項 | 默認值 | 推薦值 | 說明 |
---|---|---|---|
autocommit | on | off | 是否開啓自動提交,默認開啓,全部修改操做都會自動開啓1個事務,並提交。(影響性能) |
skip-name-resolve | false | true | 跳過IP反解爲域名過程,默認關閉,全部鏈接都會反解IP爲域名。(影響性能以及受權) |
innodb_flush_log_at_trx_commit | 1 | 1 | 在事務提交時確保redolog持久化 |
innodb-file-per-table | true | true | 獨立表空間,每1個表都以獨立文件存儲 |
sync_binlog | 0 | 1 | 在事務提交時確保binlog持久化 |
(配置項會不斷更新比較重要的)
監控可以使用 Zabbix 對MariaDB 作監控。
(實現原理是經過查詢 MariaDB 的狀態變量實現)
本文地址:https://www.cnblogs.com/neverc/p/9870088.html