MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL受權許可MariaDB的目的是徹底兼容MySQL,包括API和命令行,MySQL因爲如今閉源了,而能輕鬆成爲MySQL的代替品.在存儲引擎方面,使用XtraDB來代替MySQL的InnoDB,MariaDB由MySQL的創始人Michael Widenius主導開發,他早前曾以10億美圓的價格,將本身建立的公司MySQL AB賣給了SUN,此後,隨着SUN被甲骨文收購MySQL的全部權也落入Oracle的手中.MariaDB名稱來自MichaelWidenius的女兒Maria的名字.html
儘管採起了一些管理措施來保證數據庫的安全,可是不肯定的意外狀況老是有可能形成數據的損失,例如意外的停電、管理員不當心的操做失誤均可能會形成數據的丟失,保證數據安全的最重要的一個措施是確保對數據進行按期備份,若是數據庫中的數據丟失或者出現錯誤,可使用備份的數據進行恢復,這樣就儘量地下降了意外緣由致使的損失.mysql
數據備份是理員很是重要的工做之一,系統意外崩潰或者硬件的損壞均可能致使數據庫的丟失,所以MariaDB管理員應該按期地備份數據庫,使得在乎外狀況發生時,儘量減小損失.sql
全局鎖定: 在備份數據庫以前,咱們應該先將數據庫設置爲只讀模式,下面將設置全局爲只讀模式.數據庫
MariaDB [(none)]> show global variables like "%read_only%"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | OFF | +---------------+-------+ 1 row in set (0.00 sec) MariaDB [(none)]> set global read_only=1; #1是隻讀,0是讀寫 Query OK, 0 rows affected (0.08 sec) MariaDB [(none)]> show global variables like "%read_only%"; #再次查詢讀寫狀態 +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | ON | +---------------+-------+ 1 row in set (0.00 sec)
表的鎖定: 在備份數據庫以前,咱們應該先將數據庫設置爲只讀模式,下面將設置指定表爲只讀模式.vim
MariaDB [(none)]> flush tables with read lock; #鎖定數據表 Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> unlock tables; #解除表鎖定 Query OK, 0 rows affected (0.00 sec)
MySQLDump備份數據: 經過內置備份命令,來備份數據庫,如下是經常使用語法.安全
[root@localhost ~]# mysqldump -u root -p 數據庫名 >備份文件.sql #備份單個數據庫 [root@localhost ~]# mysqldump -u root -p 數據庫名 表名 >備份文件.sql #備份數據庫中單個表 [root@localhost ~]# mysqldump -u root -p --databases 數據庫名 >備份文件.sql #備份指定的數據庫 [root@localhost ~]# mysqldump -u root -p --all-databases >備份文件.sql #備份整個數據庫
MySQL還原數據: 經過內置備份命令,來還原數據庫,如下是經常使用語法.bash
[root@localhost ~]# mysql -u root -p 數據庫名 < 備份文件.sql #還原單個數據庫 [root@localhost ~]# mysql -u root -p 還原到的數據庫名 < 備份文件.sql #還原數據庫中單個表 [root@localhost ~]# mysql -u root -p < 備份文件.sql #還指定的數據庫 [root@localhost ~]# mysql -u root -p < 備份文件.sql #還原整個數據庫
MySQLHotcopy熱備份: 使用hotcopy
完成一次熱備份.服務器
[root@localhost ~]# mysqlhotcopy --flushlog -u="root" -p="123" --regexp=^l /root/ #以上參數解釋: -u 用戶名 -p 密碼 --regexp=^l 備份開頭是l的數據庫 /root 備份文件保存位置 [root@localhost ~]# ll 總用量 0 drwxr-x---. 2 mysql mysql 39 9月 15 04:31 lyshark
MySQLHotcopy冷恢復: 使用hotcopy
完成一次冷恢復,冷恢復須要關閉數據庫.session
[root@localhost ~]# systemctl stop mariadb [root@localhost ~]# cp -a /root/lyshrk /usr/local/mysql/data [root@localhost ~]# chown -R mysq.mysql /usr/local/mysql/data [root@localhost ~]# systemctl start mariadb
select 語句導出:ide
MariaDB [none]> select * from 數據庫名稱.表名稱 INTO OUTFILE "/root/xxx.txt" [root@localhost ~]# cat /root/xxx.txt
mysql命令導出文件
[root@localhost ~]# mysql -uroot -p --execute="select * from 表名;" 數據庫名 > filename.txt [root@localhost ~]# mysql -uroot -p --verical --execute="select * from person;" 數據庫名稱 > /root/lyshark.txt [root@localhost ~]# mysql -uroot -p --html --execute="select * from person;" 數據庫名稱 > /root/lyshark.html [root@localhost ~]# mysql -uroot -p --xml --execute="select * from person;" 數據庫名稱 > /root/lyshark.xml
load data 導入數據:
[root@localhost ~]# load data INFILE '/root/wang.txt' INTO TABLE 數據庫.表名稱; [root@localhost ~]# mysqlmport -uroot -p 數據庫名稱 filename.txt
MariaDB 日誌記錄了MariaDB數據庫平常操做和錯誤信息,MariaDB有不一樣類型的日誌文件(各自存儲了不一樣類型的日誌),從日誌當中能夠查詢到MaraiDB數據庫的運行狀況、用戶操做、錯誤信息等,能夠爲MariaDB管理和優化提供必要的信息,對於MariaDB的管理工做而言,這些日誌文件是不可缺乏的.
MariaDB默認分爲如下4類,使用這些日誌可查看MariaDB內部發生的事情,4類分別是:
● 錯誤日誌: 記錄MaraiDB服務的啓動,運行或中止MariaDB服務時出現的問題
● 查詢日誌: 記錄創建的客戶端鏈接和執行的語句
● 二進制日誌: 記錄全部更改數據的語句,能夠用於數據複製
● 慢查詢日誌: 記錄全部執行時間超過默認值的全部查詢或不適用索引的查詢
默認狀況下,全部日誌建立於MariaDB數據目錄中,經過刷新日誌,能夠強制關閉和從新打開日誌文件(或者在某些狀況下切換到一個新的日誌),當執行一個FLUSH LOGS
語句或執行mysqlladmin flush-logs
或mysqladmin refresh
時,將刷新日誌.
若是正使用MariaDB複製功能,在複製服務器上能夠維護更多日誌文件,這種日誌稱爲接替日誌.啓動日誌功能會下降數據庫的性能,若是開啓慢查詢日誌則會佔用大量的磁盤空間.
二進制日誌主要記錄數據庫的變化,二進制日誌以一種有效的格式,而且是事務安全的方式包含更新日誌中可用的全部信息,二進制日誌包含了全部更新了數據或者己經潛在更新了數據,語句以"事件"的形式保存,描述數據更改.
二進制日誌還包含關於每一個更新數據庫的語句的執行時間信息,它不包含沒有修改任何數據的語句,若是想要記錄全部語句,須要使用通常查詢日誌,使用二進制日誌的主要目的是最大可能地恢復數據庫,由於二進制日誌包含備份後進行的全部更新.
啓動二進制日誌:
1.默認狀況下二進制日誌是關閉狀態的,能夠經過修改數據庫配置文件來設置開啓日誌.
[root@localhost ~]# vim /etc/my.cnf [mysqld] log-bin="/tmp" #設置開啓日誌,也可不指定日誌保存位置 expire_logs_days = 10 #設置日誌自動清理天數 max_binlog_size = 100M #定義了單個文件的大小限制
2.添加完畢後,重啓數據庫進程,便可打開二進制日誌啦.
[root@localhost ~]# systemctl restart mariadb [root@localhost ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.60-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show variables like 'log_%'; +---------------------------------+------------------------------------------------- | Variable_name | Value +---------------------------------+------------------------------------------------- | log_bin | ON | log_bin_trust_function_creators | OFF | log_error | /var/log/mariadb/mariadb.log | log_output | FILE | log_queries_not_using_indexes | OFF | log_slave_updates | OFF | log_slow_filter | admin,filesort,filesort_on_disk,full_join, | log_slow_queries | OFF | log_slow_rate_limit | 1 | log_slow_verbosity | | log_warnings | 1 +---------------------------------+------------------------------------------------- 11 rows in set (0.01 sec)
查看二進制日誌:
1.可使用show binary logs
語句查看二進制日誌文件個數及文件名,SQL語句以下:
MariaDB [(none)]> show binary logs; +--------------------+-----------+ | Log_name | File_size | +--------------------+-----------+ | mariadb-bin.000001 | 245 | +--------------------+-----------+ 1 row in set (0.02 sec)
能夠看到當前只有一個二進制日誌,日誌文件的個數與MariaDB服務啓動的次數相同,每次啓動一次數據庫,將會產生一個新的日誌文件.
2.也可使用mysqlbinlog
命令查看日誌內容,SQL語句以下:
[root@localhost ~]# mysqlbinlog mariadb-bin.000001 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; mysqlbinlog: File 'mariadb-bin.000001' not found (Errcode: 2) DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
刪除二進制日誌:
1.咱們能夠手動刪除二進制日誌,經過使用reset master
語句刪除全部日誌
,SQL語句以下:
[root@localhost ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 4 Server version: 5.5.60-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> reset master; Query OK, 0 rows affected (0.01 sec)
2.也能夠單獨刪除指定
的日誌文件,以下刪除第一個日誌文件,SQL代碼以下:
MariaDB [(none)]> show binary logs; +--------------------+-----------+ | Log_name | File_size | +--------------------+-----------+ | mariadb-bin.000001 | 264 | | mariadb-bin.000002 | 264 | | mariadb-bin.000003 | 245 | +--------------------+-----------+ 3 rows in set (0.00 sec) MariaDB [(none)]> purge master logs to "mariadb-bin.000001"; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> show binary logs; +--------------------+-----------+ | Log_name | File_size | +--------------------+-----------+ | mariadb-bin.000002 | 264 | | mariadb-bin.000003 | 245 | +--------------------+-----------+ 3 rows in set (0.00 sec)
3.或者單獨刪除指定日期
的日誌文件,以下刪除2018/01/01
之前全部日誌,SQL代碼以下:
MariaDB [(none)]> purge master logs before "20180101"; Query OK, 0 rows affected (0.00 sec)
錯誤日誌包含了數據庫啓動和中止時,以及服務器在運行過程當中發生任何嚴重錯誤時的相關信息,錯誤日誌對於數據庫異常排查,有很大的幫助.
開啓錯誤日誌:
1.默認狀況下二進制日誌是關閉狀態的,能夠經過修改數據庫配置文件來設置開啓日誌.
[root@localhost ~]# vim /etc/my.cnf [mysqld] log-error="/var/log/mariadb/mariadb.log"
2.添加完畢後,重啓數據庫進程,便可打開二進制日誌啦.
[root@localhost ~]# systemctl restart mariadb [root@localhost ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.60-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show variables like 'log_error'; +---------------+------------------------------+ | Variable_name | Value | +---------------+------------------------------+ | log_error | /var/log/mariadb/mariadb.log | +---------------+------------------------------+ 1 row in set (0.01 sec) [root@localhost ~]# cat /var/log/mariadb/mariadb.log |head -n 10 181224 20:28:49 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 181224 20:28:49 [Note] /usr/libexec/mysqld (mysqld 5.5.60-MariaDB) starting as process 1622 ... 181224 20:28:49 InnoDB: The InnoDB memory heap is disabled 181224 20:28:49 InnoDB: Mutexes and rw_locks use GCC atomic builtins 181224 20:28:49 InnoDB: Compressed tables use zlib 1.2.7 181224 20:28:49 InnoDB: Using Linux native AIO 181224 20:28:50 InnoDB: Initializing buffer pool, size = 128.0M 181224 20:28:50 InnoDB: Completed initialization of buffer pool InnoDB: The first specified data file ./ibdata1 did not exist: InnoDB: a new database to be created!
刪除錯誤日誌:
[root@localhost ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 5.5.60-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> flush logs; Query OK, 0 rows affected (0.01 sec)
慢查詢日誌是記錄查詢時長超過指定時間的日誌,慢查詢日誌主要用來記錄執行時間較長的查詢語句,經過慢查詢日誌,能夠找出執行時間較長、執行效率較低的語句,而後進行優化.
開啓錯誤日誌:
1.默認狀況下二進制日誌是關閉狀態的,能夠經過修改數據庫配置文件來設置開啓日誌.
[root@localhost ~]# vim /etc/my.cnf [mysqld] log-slow-queries="/tmp" long_query_time=n
2.添加完畢後,重啓數據庫進程,便可打開二進制日誌啦.
[root@localhost ~]# systemctl restart mariadb [root@localhost ~]# mysql
參考文獻:mysql5.7從入門到精通