MariaDB 備份與日誌管理

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

MariaDB 數據備份與恢復

儘管採起了一些管理措施來保證數據庫的安全,可是不肯定的意外狀況老是有可能形成數據的損失,例如意外的停電、管理員不當心的操做失誤均可能會形成數據的丟失,保證數據安全的最重要的一個措施是確保對數據進行按期備份,若是數據庫中的數據丟失或者出現錯誤,可使用備份的數據進行恢復,這樣就儘量地下降了意外緣由致使的損失.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數據庫平常操做和錯誤信息,MariaDB有不一樣類型的日誌文件(各自存儲了不一樣類型的日誌),從日誌當中能夠查詢到MaraiDB數據庫的運行狀況、用戶操做、錯誤信息等,能夠爲MariaDB管理和優化提供必要的信息,對於MariaDB的管理工做而言,這些日誌文件是不可缺乏的.

MariaDB默認分爲如下4類,使用這些日誌可查看MariaDB內部發生的事情,4類分別是:

● 錯誤日誌: 記錄MaraiDB服務的啓動,運行或中止MariaDB服務時出現的問題
● 查詢日誌: 記錄創建的客戶端鏈接和執行的語句
● 二進制日誌: 記錄全部更改數據的語句,能夠用於數據複製
● 慢查詢日誌: 記錄全部執行時間超過默認值的全部查詢或不適用索引的查詢

默認狀況下,全部日誌建立於MariaDB數據目錄中,經過刷新日誌,能夠強制關閉和從新打開日誌文件(或者在某些狀況下切換到一個新的日誌),當執行一個FLUSH LOGS語句或執行mysqlladmin flush-logsmysqladmin 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從入門到精通

相關文章
相關標籤/搜索