文章目錄
- 一、錯誤日志
- 二、二進制日志
- 三、查詢日志
- 四、慢查詢日志(記錄超時的sql語句)
- 五、主從復制概括
- 六、主從復制原理
- 七、搭建主從復制
- 八、主從復制的測試
在這篇深入的技術文章中,作者將以明晰透徹的方式詳細介紹MySQL數據庫中關鍵的日志類型,如錯誤日志、二進制日志、查詢日志和慢查詢日志,以及它們的配置方法和應用場景。文章不僅探討了日志的重要性,如在故障排除和數據恢復中的關鍵作用,還步入了主從數據庫復制的核心運營,詳細講解了主從復制的設置和測試過程。讀者通過本文可以獲得對MySQL數據庫管理和排錯的全方位認識,為數據庫的高效維護和安全管理打下堅實基礎。
一、錯誤日志
錯誤日志是 MySQL 中最重要的日志之一,它記錄了當 mysqld 啟動和停止時,以及服務器在運行過程中發生任何嚴重錯誤時的相關信息。當數據庫出現任何故障導致無法正常使用時,可以首先查看此日志。
該日志是默認開啟的 , 默認存放目錄為 mysql 的數據目錄, 默認的日志文件名為 hostname.err(hostname是主機名)。
查看日志位置的命令:
show variables like 'log_error%';
二、二進制日志
二進制日志(BINLOG)記錄了所有的 DDL(數據定義語言)語句和 DML(數據操縱語言)語句,但是不包括數據查詢語句。此日志對于災難時的數據恢復起著極其重要的作用,MySQL的主從復制, 就是通過該binlog實現的。
二進制日志,MySQl8.0默認已經開啟,低版本的MySQL的需要通過配置文件開啟,并配置MySQL日志的格式。
Windows系統:my.ini Linux系統:my.cnf
#配置開啟binlog日志, 日志的文件前綴為 mysqlbin -----> 生成的文件名如 : mysqlbin.000001,mysqlbin.000002
log_bin=mysqlbin#配置二進制日志的格式
binlog_format=STATEMENT
-- 查看MySQL是否開啟了binlog日志
show variables like 'log_bin';-- 查看binlog日志的格式
show variables like 'binlog_format';-- 查看所有日志
show binlog events;-- 查看最新的日志
show master status;-- 查詢指定的binlog日志
show binlog events in 'binlog.000010';
select * from mydb1.emp2;
select count(*) from mydb1.emp2;
update mydb1.emp2 set salary = 8000;
-- 從指定的位置開始,查看指定的Binlog日志
show binlog events in 'binlog.000010' from 156;-- 從指定的位置開始,查看指定的Binlog日志,限制查詢的條數
show binlog events in 'binlog.000010' from 156 limit 2;
--從指定的位置開始,帶有偏移,查看指定的Binlog日志,限制查詢的條數
show binlog events in 'binlog.000010' from 666 limit 1, 2;-- 清空所有的 binlog 日志文件
reset master
三、查詢日志
查詢日志中記錄了客戶端的所有操作語句,而二進制日志不包含查詢數據的SQL語句。
默認情況下, 查詢日志是未開啟的。如果需要開啟查詢日志,可以設置以下配置 :
#該選項用來開啟查詢日志 , 可選值 : 0 或者 1 ; 0 代表關閉, 1 代表開啟
general_log=1#設置日志的文件名 , 如果沒有指定, 默認的文件名為 host_name.log
general_log_file=file_name
查詢日志的相關操作
-- 查看MySQL是否開啟了查詢日志
show variables like 'general_log';-- 開啟查詢日志
set global general_log=1;select * from mydb1.emp2;
select * from mydb6_view.emp;select count(*) from mydb1.emp2;
select count(*) from mydb6_view.emp;
update mydb1.emp2 set salary = 9000;
四、慢查詢日志(記錄超時的sql語句)
慢查詢日志記錄了所有執行時間超過參數 long_query_time 設置值并且掃描記錄數不小于 min_examined_row_limit 的所有的SQL語句的日志。long_query_time 默認為 10 秒,最小為 0, 精度可以到微秒。
# 該參數用來控制慢查詢日志是否開啟, 可取值: 1 和 0 , 1 代表開啟, 0 代表關閉
slow_query_log=1# 該參數用來指定慢查詢日志的文件名
slow_query_log_file=slow_query.log# 該選項用來配置查詢的時間限制, 超過這個時間將認為值慢查詢, 將需要進行日志記錄, 默認10slong_query_time=10
注意:查詢日志和慢查詢日志都是8.0之后才默認開啟的,sql語句開啟只能暫時開啟,要想永久開啟需要區配置文件里開啟。
五、主從復制概括
六、主從復制原理
核心是:二進制文件
從上圖看,復制分為三步:
1、master主庫在事務提交的時候會把數據變更記錄寫進二進制日志文件binlog中;
2、從庫通過IOthread讀取二進制日志文件binlog,寫入到從庫的中繼日志 Relay log中;
3、從庫重做中繼日志中的事件,將改變反映;
七、搭建主從復制
服務器準備
請關閉防火墻,不讓端口訪問會有問題
主庫配置
# 修改配置文件
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
server_id=1
#mysql服務ID,不要相同和從庫# 修改配置文件后重啟數據庫&&&&&&&&&&
######## 創建主從復制用戶,賦予主從復制的權限
mysql> create user 'repl'@'%' identified by 'repl@123';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
mysql> flush privileges;# 查看主庫master狀態
mysql> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000006 | 193 | | | 54a2c4bc-89dc-11ee-a732-5254d7f9c2f7:1-5 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)
從庫配置
# 執行change master to 語句
CHANGE MASTER TO
MASTER_HOST='172.16.1.51',
MASTER_PORT = 3306,
MASTER_USER='rep',
MASTER_PASSWORD='rep@123',
MASTER_LOG_FILE='mysql-bin.000006',
MASTER_LOG_POS=193;master_port:主庫的ip地址master_port:主庫的端口master_user:用戶名master_password:密碼master_log_file:上節中主庫查詢的file項對應的值master_log_pos:上節中主庫查詢的的值# 開啟主從復制
mysql> start slave;# 查看主從復制狀態
mysql> show slave status\G