MySQL日志記錄了MySQL數(shù)據(jù)庫日常操作和錯(cuò)誤信息。MySQL有不同類型的日志文件(各自存儲了不同類型的日志),從日志當(dāng)中可以查詢到MySQL數(shù)據(jù)庫的運(yùn)行情況、用戶的操作、錯(cuò)誤的信息等。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),伊犁企業(yè)網(wǎng)站建設(shè),伊犁品牌網(wǎng)站建設(shè),網(wǎng)站定制,伊犁網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,伊犁網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
MySQL的日志分為以下四大類:
- 錯(cuò)誤日志:記錄mysql服務(wù)的啟動(dòng),運(yùn)行或停止mysql服務(wù)時(shí)出現(xiàn)的問題;
- 查詢?nèi)罩荆河涗浗⒌目蛻舳说倪B接和執(zhí)行的語句;
- 二進(jìn)制日志:記錄所有更改數(shù)據(jù)的語句,可以用于數(shù)據(jù)的復(fù)制;
- 慢查詢?nèi)罩荆河涗浰袌?zhí)行的時(shí)間超過long_query_time的所有查詢或不使用索引的查詢。
默認(rèn)情況下,所有日志創(chuàng)建于MySQL數(shù)據(jù)目錄中,通過刷新日志,可以強(qiáng)制MySQL關(guān)閉和重新打開日志文件,F(xiàn)lush logs刷新日志或者執(zhí)行mysqladmin flush-logs 如果正使用MySQL復(fù)制功能,在復(fù)制服務(wù)器上可以維護(hù)更多日志文件,這種日志我們稱為接替日志。啟動(dòng)日志功能會降低MySQL數(shù)據(jù)庫的性能。
<!--查看全局的系統(tǒng)狀態(tài)-->
mysql> show global variables\G
mysql> show global variables like '%log%';
<!--查看當(dāng)前會話的系統(tǒng)狀態(tài)-->
mysql> show session variables\G
mysql> show session variables like '%log%';
若要修改上面查看出來的參數(shù),可以在MySQL的主配置文件中的mysqld字段中寫入即可,如:binlog_cache_size = 1M。又或者可以在MySQL數(shù)據(jù)庫中進(jìn)行臨時(shí)修改:set global binlog_cache_size = 1048576,這種臨時(shí)修改在MySQL重啟后就會失效。
<!--查看全局的運(yùn)行狀態(tài)-->
mysql> show global status\G
<!--查看當(dāng)前會話的運(yùn)行狀態(tài)-->
mysql> show session status;
<!--查看MySQL的版本-->
[root@mysql ~]# mysql -V
mysql> status;
mysql> select version();
在mysql數(shù)據(jù)庫中,錯(cuò)誤日志功能是默認(rèn)開啟的。默認(rèn)情況下,錯(cuò)誤日志存儲在mysql數(shù)據(jù)庫的數(shù)據(jù)目錄中。錯(cuò)誤日志文件通常的名稱為hostname.err。其中,hostname表示服務(wù)器主機(jī)名。 錯(cuò)誤日志信息可以自己進(jìn)行配置的,錯(cuò)誤日志所記錄的信息是可以通過log-error和log-warnings來定義的,其中l(wèi)og-error是定義是否啟用錯(cuò)誤日志的功能和錯(cuò)誤日志的存儲位置,log-warnings是定義是否將警告信息也定義至錯(cuò)誤日志中。默認(rèn)情況下錯(cuò)誤日志大概記錄以下幾個(gè)方面的信息:服務(wù)器啟動(dòng)和關(guān)閉過程中的信息(未必是錯(cuò)誤信息,如mysql如何啟動(dòng)InnoDB的表空間文件的、如何初始化自己的存儲引擎的等等)、服務(wù)器運(yùn)行過程中的錯(cuò)誤信息、事件調(diào)度器運(yùn)行一個(gè)事件時(shí)產(chǎn)生的信息、在從服務(wù)器上啟動(dòng)服務(wù)器進(jìn)程時(shí)產(chǎn)生的信息,MySQL有很多系統(tǒng)變量可以設(shè)置,系統(tǒng)變量設(shè)置不同,會導(dǎo)致系統(tǒng)運(yùn)行狀態(tài)的不同。因此mysql提供兩組命令,分別查看系統(tǒng)設(shè)置和運(yùn)行狀態(tài)。
一般而言,日志級別的定義沒有會話變量都只是在全局級別下定義錯(cuò)誤日志的狀態(tài):
mysql> show global variables like '%log_error%';
+---------------------+----------------------------------+
| Variable_name | Value |
+---------------------+----------------------------------+
| binlog_error_action | ABORT_SERVER |
| log_error | /usr/local/mysql/data/mysqld.err |
| log_error_verbosity | 3 |
+---------------------+----------------------------------+
3 rows in set (0.01 sec)
其中 log_error定義為錯(cuò)誤日志文件路徑 ,log_error_verbosity值得含義如下:
Verbosity | Message |
---|---|
1 | Error only |
2 | Error and warnings |
3 | Errors, warnings,and notes(default) |
錯(cuò)誤日志的存放路徑在my.cnf的主配置文件中指定,如下:
為了方便維護(hù)需要,有時(shí)候會希望將錯(cuò)誤日志中的內(nèi)容做備份并重新開始記錄,這時(shí)候就可以利用MySQL 的FLUSH LOGS 命令來告訴MySQL 備份舊日志文件并生成新的日志文件。備份文件名以“.old”結(jié)尾。
刪除錯(cuò)誤日志
在mysql5.5.7之前:數(shù)據(jù)庫管理員可以刪除很長時(shí)間之前的錯(cuò)誤日志,以保證mysql服務(wù)器上的硬盤空間。mysql數(shù)據(jù)庫中,可以使用mysqladmin命令開啟新的錯(cuò)誤日志。mysqladmin命令的語法如下:mysqladmin –u root –p flush-logs也可以登錄mysql數(shù)據(jù)庫中使用FLUSH LOGS語句來開啟新的錯(cuò)誤日志。 在mysql5.5.7之后:服務(wù)器將關(guān)閉此項(xiàng)功能。只能使用重命名原來的錯(cuò)誤日志文件,手動(dòng)沖洗日志創(chuàng)建一個(gè)新的,方式如下:
[root@mysql ~]# cd /usr/local/mysql/data/
[root@mysql data]# mv mysqld.err{,.old}
[root@mysql data]# mysqladmin -uroot -p flush-logs
Enter password:
二進(jìn)制日志主要記錄MySQL數(shù)據(jù)庫的變化,二進(jìn)制日志以一種有效的格式,并且是事務(wù)安全的方式包含更新日志中可用的信息。二進(jìn)制日志包含了所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)。還包含關(guān)于每個(gè)更新數(shù)據(jù)庫的語句的執(zhí)行時(shí)間,它不包含沒有修改任何數(shù)據(jù)的語句。使用二進(jìn)制日志的主要目的是最大可能地恢復(fù)數(shù)據(jù)庫。
[root@mysql data]# vim /etc/my.cnf #編輯主配置文件
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
server_id=1
socket=/usr/local/mysql/mysql.sock
log-error=/usr/local/mysql/data/mysqld.err
log-bin=/usr/local/mysql/data/binary_log #指定二進(jìn)制日志的路徑及名稱
expire_logs_days=10 #清除日志的天數(shù)
max_binlog_size=100M #單個(gè)日志文件的大小限制,超出會新建一個(gè)日志文件
[root@mysql data]# systemctl restart mysqld #重啟MySQL使配置生效
[root@mysql data]# ll | grep binary #會在指定的路徑下生成以下兩個(gè)文件
-rw-r----- 1 mysql mysql 154 12月 30 20:59 binary_log.000001
-rw-r----- 1 mysql mysql 40 12月 30 20:59 binary_log.index
登錄到數(shù)據(jù)庫中也可以查看到,如下:
MySQL二進(jìn)制日志存儲了所有的變更信息,MySQL二進(jìn)制日志經(jīng)常使用。當(dāng)MySQL創(chuàng)建二進(jìn)制日志文件時(shí),首先創(chuàng)建一個(gè)以’filename’為名稱,以’.index’為后綴的文件;在創(chuàng)建一個(gè)以’filename’為名稱,以’.000001’為后綴的文件。當(dāng)MySQL服務(wù)重啟一次,以’.000001’為后綴的文件會增加一個(gè),并且后綴名加1
遞增。如果日志長度超過max_binlog_size的上限,也會創(chuàng)建一個(gè)新的日志。 Show binary logs;可以查看當(dāng)前的二進(jìn)制日志文件個(gè)數(shù)及其文件名。二進(jìn)制日志并不能直接查看,如果想要查看日志內(nèi)容,
可以通過mysqlbinlog命令查看:
mysql> show binary logs;
+-------------------+-----------+
| Log_name | File_size |
+-------------------+-----------+
| binary_log.000001 | 154 |
+-------------------+-----------+
1 row in set (0.00 sec)
也可以退出MySQL在命令行使用mysqlbinlog命令查看:
[root@mysql data]# mysqlbinlog binary_log.000001
MySQL的二進(jìn)制文件可以配置自動(dòng)刪除,同時(shí)MySQL提供了手動(dòng)刪除二進(jìn)制文件的方法:
RESET MASTER:刪除所有的二進(jìn)制日志文件;
PURGE MASTER LOGS:只刪除部分二進(jìn)制日志文件;
Reset master:刪除所有二進(jìn)制日志 ;
Purge master logs to ‘二進(jìn)制名’ :刪除單個(gè)二進(jìn)制日志之前的。
mysql> purge master logs to "binary_log.000003"; <!--刪除...03之前的二進(jìn)制日志文件-->
mysql> purge master logs before '20180101'; <!--刪除2018-01-01之前的日志文件-->
關(guān)于通過二進(jìn)制日志還原的具體過程,還是參考我之前的博文吧!如下:
MySQL的備份與恢復(fù)詳解
事務(wù)日志(InnoDB特有的日志,因?yàn)橹挥蠭nnodb支持事務(wù))可以幫助提高事務(wù)的效率。使用事務(wù)日志,存儲引擎在修改表的數(shù)據(jù)時(shí)只需要修改其內(nèi)存拷貝,再把修改行為記錄到持久在硬盤上的事務(wù)日志中,而不用每次都將修改的數(shù)據(jù)本身持久到磁盤。事務(wù)日志采用追加的方式,因此寫日志的操作是磁盤上一小塊區(qū)域內(nèi)的順序I/O,而不像隨機(jī)I/O需要在磁盤的多個(gè)地方移動(dòng)磁頭,所以采用事務(wù)日志的方式相對來說要快得多。事務(wù)日志持久以后,內(nèi)存中被修改的數(shù)據(jù)在后臺可以慢慢的刷回到磁盤。目前大多數(shù)的存儲引擎都是這樣實(shí)現(xiàn)的。 如果數(shù)據(jù)的修改已經(jīng)記錄到事務(wù)日志并持久化,但數(shù)據(jù)本身還沒有寫回磁盤,此時(shí)系統(tǒng)崩潰,存儲引擎在重啟時(shí)能夠自動(dòng)恢復(fù)這部分修改的數(shù)據(jù)。具有的恢復(fù)方式則視存儲引擎而定。
mysql> show global variables like 'innodb_lo%';
在上述指令輸出的部分內(nèi)容解釋如下:
| innodb_flush_log_at_trx_commit | 1 #在事務(wù)提交時(shí)innodb是否同步日志從緩沖區(qū)到文件
中,當(dāng)這個(gè)值為1(默認(rèn)值)之時(shí),在每個(gè)事務(wù)提交時(shí),日志緩沖被寫到日志文件,對日志文件做到磁盤操作的刷新,性能會很差造成大量的磁盤I/O但這種方式最安全;如果設(shè)為2,每次提交事務(wù)都會寫日志,但并不會執(zhí)行刷的操作。每秒定時(shí)會刷到日志文件。要注意的是,并不能保證100%每秒一定都會刷到磁盤,這要取決于進(jìn)程的調(diào)度。每次事務(wù)提交的時(shí)候?qū)?shù)據(jù)寫入事務(wù)日志,而這里的寫入僅是調(diào)用了文件系統(tǒng)的寫入操作,而文件系統(tǒng)是有緩存的,所以這個(gè)寫入并不能保證數(shù)據(jù)已經(jīng)寫入到物理磁盤。設(shè)置為0,日志緩沖每秒一次地被寫到日志文件,并且對日志文件做到磁盤操作的刷新,但是在一個(gè)事務(wù)提交不做任何操作。
注:刷寫的概念
刷寫其實(shí)是兩個(gè)操作,刷(flush)和寫(write),區(qū)分這兩個(gè)概念是很重要的。在大多數(shù)的操作系統(tǒng)中,把Innodb的log buffer(內(nèi)存)寫入日志(調(diào)用系統(tǒng)調(diào)用write),只是簡單的把數(shù)據(jù)移到操作系統(tǒng)緩存中,操作系統(tǒng)緩存同樣指的是內(nèi)存。并沒有實(shí)際的持久化數(shù)據(jù)。
所以,通常設(shè)為0和2的時(shí)候,在崩潰或斷電的時(shí)候會丟失最后一秒的數(shù)據(jù),因?yàn)檫@個(gè)時(shí)候數(shù)據(jù)只是存在于操作系統(tǒng)緩存。之所以說“通常”,可能會有丟失不只1秒的數(shù)據(jù)的情況,比如說執(zhí)行flush操作的時(shí)候阻塞了。
總結(jié)
設(shè)為1當(dāng)然是最安全的,但性能頁是最差的(相對其他兩個(gè)參數(shù)而言,但不是不能接受)。如果對數(shù)據(jù)一致性和完整性要求不高,完全可以設(shè)為2,如果只最求性能,例如高并發(fā)寫的日志服務(wù)器,設(shè)為0來獲得更高性能。
| innodb_locks_unsafe_for_binlog | OFF |
| innodb_log_buffer_size | 16777216 |
| innodb_log_checksums | ON
|
| innodb_log_compressed_pages | ON |
| innodb_log_file_size | 50331648 #日志文件大小 |
| innodb_log_files_in_group | 2 # DB中設(shè)置幾組事務(wù)日志,默認(rèn)是2
| innodb_log_group_home_dir | ./ #定義innodb事務(wù)日志組的位置,此位置設(shè)置默認(rèn)為MySQL的datadir 。
每個(gè)事務(wù)日志都是大小為50兆的文件(不同版本的mysql有差異): 在mysql中默認(rèn)以ib_logfile0,ib_logfile1名稱存在。
顧名思義,慢查詢?nèi)罩局杏涗浀氖菆?zhí)行時(shí)間較長的query,也就是我們常說的slow query。 慢查詢?nèi)罩静捎玫氖呛唵蔚奈谋靖袷?,可以通過各種文本編輯器查看其中的內(nèi)容。其中 記錄了語句執(zhí)行的時(shí)刻,執(zhí)行所消耗的時(shí)間,執(zhí)行用戶,連接主機(jī)等相關(guān)信息。 慢查詢?nèi)罩镜淖饔茫?慢查詢?nèi)罩臼怯脕碛涗泩?zhí)行時(shí)間超過指定時(shí)間的查詢語句。通過慢查詢?nèi)罩?,可以查找出哪些查詢語句的執(zhí)行效率很低,以便進(jìn)行優(yōu)化。一般建議開啟,它對服務(wù)器性能的影響微乎其微,但是可以記錄mysql服務(wù)器上執(zhí)行了很長時(shí)間的查詢語句??梢詭椭覀兌ㄎ恍阅軉栴}的。MySQL 還提供了專門用來分析滿查詢?nèi)罩镜墓ぞ叱绦騧ysqldumpslow,用來幫助數(shù)據(jù)庫管理人員解決可能存在的性能問題。
注:在不同的mysql版本中,開啟慢查詢?nèi)罩緟?shù)不太一樣,不過都可以通過 show variables like "%slow%" 和show variables like "%long%"查看出來。
mysql> show global variables like '%slow_query_log%'; <!--查詢慢查詢?nèi)罩臼欠耖_啟-->
+---------------------+--------------------------------------+
| Variable_name | Value |
+---------------------+--------------------------------------+
| slow_query_log | OFF | <!--OFF為未開啟-->
| slow_query_log_file | /usr/local/mysql/data/mysql-slow.log |
+---------------------+--------------------------------------+
<!--上面指定的使慢查詢?nèi)罩镜挠涗浀奈恢?->
2 rows in set (0.01 sec)
mysql> show global variables like '%long%'; <!--查看如何定義語句為慢查詢語句-->
+----------------------------------------------------------+-----------+
| Variable_name | Value |
+----------------------------------------------------------+-----------+
| long_query_time | 10.000000 |
| performance_schema_events_stages_history_long_size | 10000 |
| performance_schema_events_statements_history_long_size | 10000 |
| performance_schema_events_transactions_history_long_size | 10000 |
| performance_schema_events_waits_history_long_size | 10000 |
+----------------------------------------------------------+-----------+
5 rows in set (0.00 sec)
<!--
在上面的結(jié)果中,long_query_time的值就是慢查詢超時(shí)時(shí)間,
默認(rèn)為10s,只要執(zhí)行耗時(shí)超過10s的語句就被定義為慢查詢語句
-->
啟動(dòng)慢查詢?nèi)罩居涗洠?/strong>
方法1:通過配置文件my.cnf開啟慢查詢?nèi)罩荆?/strong>
[root@mysql ~]# vim /etc/my.cnf #編輯主配置文件,在mysqld字段下寫入以下幾行
[mysqld]
slow_query_log=1 # 1表示開啟慢查詢
slow_query_log_file=/usr/local/mysql/data/mysql-slow.log #指定慢查詢?nèi)罩疚恢?long_query_time=0.0001 #指定超時(shí)時(shí)間,也就是超過這個(gè)時(shí)間就會被記錄到慢查詢?nèi)罩?slow_launch_time=1 #如果建立線程花費(fèi)了比這個(gè)值更長的時(shí)間,slow_launch_threads計(jì)數(shù)器將增加
[root@mysql ~]# systemctl restart mysqld #重啟服務(wù)使配置生效
再次登錄數(shù)據(jù)庫查看相關(guān)信息,會發(fā)現(xiàn)更改已經(jīng)生效,如下:
方法2:通過登錄MySQL服務(wù)器直接定義,方式如下:
mysql> set global slow_query_log=1;
mysql> set global long_query_time=0.0001;
在上面的定義中,global表示全局生效,還有一個(gè)選項(xiàng)是session,表示僅在當(dāng)前會話生效,其區(qū)別是,session在退出當(dāng)前會話后就會被重置,global則是在重啟MySQL服務(wù)后才會被重置,而方法1中寫入配置文件中的方法,則是真正的永久生效。
注意:如果主配置文件中定義了long_query_time的值,并且MySQL命令行中使用set指令又定義了long_query_time的值,則配置文件中定義的值優(yōu)先生效。
修改后的相關(guān)設(shè)置如下:
在終端命令行使用mysqldumpslow命令工具查看慢查詢?nèi)罩荆?/strong>
若想要查詢到慢查詢?nèi)罩?,必須保證兩點(diǎn),首先是將慢查詢的超時(shí)時(shí)間設(shè)置的短一些,比如我在上面設(shè)置為了0.0001,只要查詢的時(shí)間超過了這個(gè)值,則被定義為慢查詢。(為了驗(yàn)證效果,在生產(chǎn)環(huán)境中還是要結(jié)合實(shí)際情況)。第二呢,就是在開啟慢查詢后還需要執(zhí)行幾條查詢語句,以便產(chǎn)生日志記錄信息(自己隨便查詢兩句吧)。
mysqldumpslow指令的部分選項(xiàng)解釋:
使用選項(xiàng)查看慢查詢?nèi)罩荆?/p>
[root@mysql data]# mysqldumpslow -t 2 -a -s c mysql-slow.log
#以次數(shù)來排序,查詢前兩條,并且顯示語句的所有內(nèi)容
在MySQL 中每一個(gè)數(shù)據(jù)庫都會在定義好(或者默認(rèn))的數(shù)據(jù)目錄下存在一個(gè)以數(shù)據(jù)庫名字命名的文件夾,用來存放該數(shù)據(jù)庫中各種表數(shù)據(jù)文件。不同的MySQL 存儲引擎有各自不同的數(shù)據(jù)文件。如MyISAM 用“.MYD”作為擴(kuò)展名,Innodb 用“.ibd”,Archive 用“.arc”,CSV 用“.csv”,等等。
“.frm”文件 與表相關(guān)的元數(shù)據(jù)(meta)信息都存放在“.frm”文件中,包括表結(jié)構(gòu)的定義信息等。不論是什么存儲引擎(MySQL常用的兩個(gè)存儲引擎是MyISAM和InnoDB),每一個(gè)表都會有一個(gè)以表名命名的“.frm”文件。所有的“.frm”文件都存放在所屬數(shù)據(jù)庫的文件夾下面。
MyISAM數(shù)據(jù)庫表文件
- .MYD文件:表數(shù)據(jù)文件;.MYI文件:索引文件
- “.MYD”文件 “.MYD”文件是MyISAM存儲引擎專用,存放MyISAM 表的數(shù)據(jù)。每一個(gè)MyISAM 表都會有一個(gè)“.MYD”文件與之對應(yīng),同樣存放于所屬數(shù)據(jù)庫的文件夾下,和“.frm”文件在一起
- “.MYI”文件 “.MYI”文件也是專屬于MyISAM 存儲引擎的,主要存放MyISAM 表的索引相關(guān)信息。對于MyISAM 存儲來說,可以被cache 的內(nèi)容主要就是來源于“.MYI”文件中。每
一個(gè)MyISAM 表對應(yīng)一個(gè)“.MYI”文件,存放于位置和“.frm”以及“.MYD”一樣。
Innodb數(shù)據(jù)庫表文件
InnoDB采用表空間(tablespace)來管理數(shù)據(jù),存儲表數(shù)據(jù)和索引。
總結(jié)
共享表空間以及獨(dú)占表空間都是針對數(shù)據(jù)的存儲方式而言的。 共享表空間: 某一個(gè)數(shù)據(jù)庫的所有的表數(shù)據(jù),索引文件全部放在一個(gè)文件中。 獨(dú)占表空間: 每一個(gè)表都將會生成以獨(dú)立的文件方式來進(jìn)行存儲,每一個(gè)表都有一個(gè).frm表描述文件,還有一個(gè).ibd文件。其中這個(gè)文件包括了單獨(dú)一個(gè)表的數(shù)據(jù)內(nèi)容以及索引內(nèi)容。
兩者之間的優(yōu)缺點(diǎn)
共享表空間:
優(yōu)點(diǎn): 可以放表空間分成多個(gè)文件存放到各個(gè)磁盤上。數(shù)據(jù)和文件放在一起方便管理。
缺點(diǎn): 所有的數(shù)據(jù)和索引存放到一個(gè)文件中,多個(gè)表及索引在表空間中混合存儲,這樣對于一個(gè)表做了大量刪除操作后表空間中將會有大量的空隙,特別是對于統(tǒng)計(jì)分析,日值系統(tǒng)這類應(yīng)用最不適合用共享表空間。
獨(dú)立表空間:
優(yōu)點(diǎn):
- 每個(gè)表都有自已獨(dú)立的表空間。
- 每個(gè)表的數(shù)據(jù)和索引都會存在自已的表空間中。
- 可以實(shí)現(xiàn)單表在不同的數(shù)據(jù)庫中移動(dòng)。
- 空間可以回收
- a) Drop table操作自動(dòng)回收表空間,如果對于統(tǒng)計(jì)分析或是日值表,刪除大量數(shù)據(jù)后可以通過:alter table TableName engine=innodb;回縮不用的空間。
- b)對于使用獨(dú)立表空間的表,不管怎么刪除,表空間的碎片不會太嚴(yán)重的影響性能,而且還有機(jī)會處理。
缺點(diǎn): 單表增加過大,如超過100個(gè)G。 相比較之下,使用獨(dú)占表空間的效率以及性能會更高一點(diǎn)。
mysql> show variables like '%innodb_file_per%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
ON代表獨(dú)立表空間管理,OFF代表共享表空間管理;(查看單表的表空間管理方式,需要查看每個(gè)表是否有單獨(dú)的數(shù)據(jù)文件)。
[root@mysql ~]# vim /etc/my.cnf #編輯主配置文件,在mysqld字段下寫入以下配置
innodb_file_per_table=0 #0為使用共享表空間,1為獨(dú)占表空間
innodb_data_file_path=ibdata1:100M:autoextend #設(shè)置一個(gè)可自動(dòng)擴(kuò)展大小,尺寸為100M的數(shù)據(jù)文件
innodb_data_home_dir=/usr/local/mysql/data #定義共享表空間默認(rèn)存放路徑
[root@mysql ~]# systemctl restart mysqld #啟動(dòng)報(bào)錯(cuò)了
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
查看日志如下:
注:不同版本的mysql報(bào)錯(cuò)略有不同,注意看錯(cuò)誤日志的內(nèi)容。大概意思就是設(shè)置的pages頁為6400,超過了它的最大值4864,那么算一下,設(shè)置的初始大小100M,pages大小就是6400,則表示1M=64pages,它的最大值是4864,也就是說,我們設(shè)置初始大小最大可以是4864/64=76M。
再次修改配置文件如下:
[root@mysql ~]# vim /etc/my.cnf #再次修改主配置文件
innodb_data_file_path=ibdata1:76M:autoextend
#修改初始大小為76M
[root@mysql ~]# systemctl restart mysqld #再次重啟MySQL服務(wù)
#同樣,如果還是啟動(dòng)失敗,則再次查看錯(cuò)誤日志,是否pages頁大小設(shè)置的還是不合理
此時(shí)狀態(tài)為OFF,則表示使用的是共享表存儲空間,之后創(chuàng)建的表都會使用定義的共享表空間來存儲數(shù)據(jù)。
———————— 本文至此結(jié)束,感謝閱讀 ————————
網(wǎng)頁名稱:MySQL日志詳解
網(wǎng)址分享:http://chinadenli.net/article8/gpppop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、App開發(fā)、小程序開發(fā)、商城網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)