±³¾°£º
¼ÙÉèÕâôһ¸öÇé¿ö£¬ÄãÊÇij¹«Ë¾mysql-DBA£¬Ä³ÈÕͻȻ¹«Ë¾Êý¾Ý¿âÖеÄËùÓб»ÈËΪɾÁË¡£
¾¡¹ÜÓÐÊý¾Ý±¸·Ý£¬µ«ÊÇÒò·þÎñÍ£Ö¹¶øÔì³ÉµÄËðʧÉÏǧÍò£¬ÏÖÔÚ¹«Ë¾ÐèÒª²é³öÄǸö×öɾ³ý²Ù×÷µÄÈË¡£
µ«ÊÇÓµÓÐÊý¾Ý¿â²Ù×÷ȨÏÞµÄÈ˺ܶ࣬ÈçºÎÅŲ飬֤¾ÝÓÖÔÚÄÄ£¿
ÊDz»ÊǾõµÃÎÞÄÜΪÁ¦£¿
mysql±¾Éí²¢Ã»ÓвÙ×÷É󼯵ŦÄÜ£¬ÄÇÊDz»ÊÇÒâζ×ÅÓöµ½ÕâÖÖÇé¿öÖ»ÄÜ×ÔÈϵ¹Ã¹ÄØ£¿
±¾Îľͽ«ÌÖÂÛÒ»ÖÖ¼òµ¥Ò×Ðеģ¬ÓÃÓÚmysql·ÃÎÊÉ󼯵Ä˼·¡£
¸ÅÊö£º
Æäʵmysql±¾ÉíÒѾÌṩÁËÏêϸµÄsqlÖ´ÐмǼ¨Cgeneral log£¨Ïê¼ûÉÏÆªblog£© £¬µ«ÊÇ¿ªÆôËüÓÐÒÔϼ¸¸öȱµã
ÎÞÂÛsqlÓÐÎÞÓï·¨´íÎó£¬Ö»ÒªÖ´ÐÐÁ˾ͻá¼Ç¼£¬µ¼Ö¼Ç¼´óÁ¿ÎÞÓÃÐÅÏ¢£¬ºóÆÚµÄɸѡÓÐÄѶȡ£
sql²¢·¢Á¿ºÜ´óʱ£¬logµÄ¼Ç¼»á¶ÔioÔì³ÉÒ»¶¨µÄÓ¡Ïó£¬ÊÇÊý¾Ý¿âЧÂʽµµÍ¡£
ÈÕÖ¾ÎļþºÜÈÝÒ׿ìËÙÅòÕÍ£¬²»Í×ÉÆ´¦Àí»á¶Ô´ÅÅ̿ռäÔì³ÉÒ»¶¨Ó°Ïì¡£
±¾ÎĹ۵㣺
ʹÓÃinit-connect + binlogµÄ·½·¨½øÐÐmysqlµÄ²Ù×÷É󼯡£
ÓÉÓÚmysql binlog¼Ç¼ÁËËùÓжÔÊý¾Ý¿â³¤Éúʵ¼ÊÐ޸ĵÄsqlÓï¾ä£¬¼°ÆäÖ´ÐÐʱ¼ä£¬ºÍconnection_idµ«ÊÇȴûÓмǼconnection_id¶ÔÓ¦µÄÏêϸÓû§ÐÅÏ¢¡£
Òò´Ë±¾ÎĽ«Í¨¹ýinit-connect£¬ÔÚÿ´ÎÁ¬½ÓµÄ³õʼ»¯½×¶Î£¬¼Ç¼ÏÂÕâ¸öÁ¬½ÓµÄÓû§£¬ºÍconnection_idÐÅÏ¢¡£
ÔÚºóÆÚÉ󼯽øÐÐÐÐΪ׷×Ùʱ£¬¸ù¾Ýbinlog¼Ç¼µÄÐÐΪ¼°¶ÔÓ¦µÄconnection-id ½áºÏ ֮ǰÁ¬½ÓÈÕÖ¾¼Ç¼ ½øÐзÖÎö£¬µÃ³ö×îºóµÄ½áÂÛ¡£
ÕýÎÄ£º
1. ÉèÖÃinit-connect
1.1 ´´½¨ÓÃÓÚ´æ·ÅÁ¬½ÓÈÕÖ¾µÄÊý¾Ý¿âºÍ±í
create database accesslog;
CREATE TABLE accesslog.accesslog (`id` int(11) primary key auto_increment, `time` timestamp, `localname` varchar(30), `matchname` varchar(30))
1.2 ´´½¨Óû§È¨ÏÞ
¿ÉÓÃÏֳɵÄrootÓû§ÓÃÓÚÐÅÏ¢µÄ¶ÁÈ¡
grant read on accesslog.* to root@localhost identified by ¡®password¡¯;
Èç¹û´æÔÚ¾ßÓÐto *.* ȨÏÞµÄÓû§ÐèÒª½øÐÐÏÞÖÆ¡£
µ±Ç°µÇ¼Óû§ÐèÒª¶Ôaccesslog¿âÖÁÉÙ¾ßÓÐinsertȨÏÞ
1.3 ÉèÖÃinit-connect
ÔÚ[mysqld]ÏÂÌí¼ÓÒÔÏÂÉèÖãº
init-connect=¡¯insert into accesslog.accesslog values(connection_id(),now(),user(),current_user());¡¯¡ª×¢Òâinsert¾ä×ÓµÄÓï·¨¡¢ÒýºÅÕýÈ·£¬Èç¹û´íÎóµÄ»°£¬µÇ¼µ½mysqlÖ®ºó£¬²Ù×÷db»áÌáʾÄãÓë·þÎñÆ÷Á¬½Ó¶ªÊ§¡£
Eg.ÌáʾÐÅÏ¢
No connection. Trying to reconnect...
Connection id: 220
Current database: *** NONE ***
ERROR 2013 (HY000): Lost connection to MySQL server during query
log-bin--------Èç¹ûÔÀ´µÄÅäÖÃÎļþÒѾÆôÓÃÁËÈÕÖ¾£¬ÕâÀïÊ¡ÂÔ
1.4 ÖØÆôÊý¾Ý¿âÉúЧ
shell> service mysqld restart
2. ¼Ç¼׷×Ù
2.1 thread_idÈ·ÈÏ
¼ÙÉèÏëÖªµÀÔÚ2009Äê11ÔÂ25ÈÕ£¬ÉÏÎç9µã¶àµÄʱºò£¬ÊÇ˰Étest.dummyÕâ¸ö±í¸øÉ¾ÁË¡£¿ÉÒÔÓÃÒÔÏÂÓï¾ä¶¨Î»
mysqlbinlog ¨Cstart-datetime=¡¯2009-11-25 09:00:00¡ä ¨Cstop-datetime=¡¯2009-11-25 09:00:00¡ä binlog.xxxx | grep ¡®dummy¡¯-B 5
»áµÃµ½ÈçϽá¹û(¿É¼ûthread_idΪ5)£º
# at 300777
#091124 16:54:00 server id 10 end_log_pos 301396 Query thread_id=5 exec_time=0 error_code=0
SET TIMESTAMP=1259052840;
drop table test.dummy;
2.2 Óû§È·ÈÏ
thread_id È·ÈÏÒÔºó£¬ÕÒµ½ÔªÐ×¾ÍÖ»ÊÇÒ»ÌõsqlÓï¾äµÄÎÊÌâÁË¡£
select * from accesslog.accesslog where conn_id=5 ;
¾ÍÄÜ·¢ÏÖÊÇtestuser2@localhost¸ÉµÄÁË¡£
+¡ª¡ª+¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª-+¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª-+¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¨C+
| id | time | localname | matchname |
+¡ª¡ª+¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª-+¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª-+¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¨C+
| 5 | 2009-11-25 10:57:39 | testuser2@localhost | testuser2@% |
+¡ª¡ª+¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª-+¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª-+¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¨C+
3. Q&A
Q£ºÊ¹ÓÃinit-connect»áÓ°Ïì·þÎñÆ÷ÐÔÄÜÂð£¿
A£ºÀíÂÛÉÏ£¬Ö»»áÔÚÓû§Ã¿´ÎÁ¬½ÓʱÍùÊý¾Ý¿âÀï²åÈëÒ»Ìõ¼Ç¼£¬²»»á¶ÔÊý¾Ý¿â²úÉúºÜ´óÓ°Ïì¡£³ý·ÇÁ¬½ÓƵÂʷdz£¸ß£¨µ±È»£¬Õâ¸öʱºòÐèҪעÒâµÄ¾ÍÊÇÈçºÎ½øÐÐÁ¬½Ó¸´ÓúͿØÖÆ£¬¶ø·ÇÊDz»ÊÇÒªÓÃÕâÖÖ·½·¨µÄÎÊÌâÁË£©
Q£ºaccess-log±íÈçºÎά»¤
A: ÓÉÓÚÊÇÒ»¸ölogϵͳ£¬ÍƼöʹÓÃarchive´æ´¢ÒýÇæ£¬ÓÐÀûÓÚÊý¾Ý¶òѹËõ´æ·Å¡£Èç¹ûÊý¾Ý¿âÁ¬½ÓÊýÁ¿ºÜ´óµÄ»°£¬½¨ÒéÒ»¶¨Ê±¼ä×öÒ»´ÎÊý¾Ýµ¼³ö£¬È»ºóÇå±í¡£
Q£º±íÓÐÆäËûÓÃ;ô£¿
A£ºÓУ¡access-log±íµ±È»²»Ö»ÓÃÓÚÉ󼯣¬µ±È»Ò²¿ÉÒÔÓÃÓÚ¶ÔÓÚÊý¾Ý¿âÁ¬½ÓµÄÇé¿ö½øÐÐÊý¾Ý·ÖÎö£¬ÀýÈçÿÈÕÁ¬½ÓÊý·Ö²¼Í¼µÈµÈ£¬Ö»ÓÐÏë²»µ½Ã»ÓÐ×ö²»µ½¡£
Q£º»áÓÐÒÅ©µÄ¼Ç¼Âð£¿
A£º»áµÄ£¬init-connect ÊDz»»áÔÚsuperÓû§µÇ¼ʱִÐеġ£ËùÒÔaccess-logÀï²»»áÓÐÊý¾Ý¿â³¬¼¶Óû§µÄ¼Ç¼£¬ÕâÒ²ÊÇΪʲôÎÒÃDz»Ö÷ÕŶà¸ö³¬¼¶Óû§£¬²¢ÇÒ¶àÈËʹÓõÄÔÒò