一、理论:
1.错误日志:
a.记录了mysqld启动和停止时以及出错时的相关信息,当数据库出现故障导致无法启动时可以先查看此信息。
b.可用--log-error来指定mysqld保存错误日志文件的位置
2.二进制日志:
a.statement:记录的都是语句。优点:日志记录清晰易读、日志量少、对I/O影响较小,缺点:在某些情况下slave的日志复制会出错
b.row:将每一行的变更记录到日志中,而不是记录sql语句。优点:记录每一行的数据变化细节,不会出现某些情况下无法复制的情况,缺点:日志量大,对I/O影响较大
c.mixed:目前mysql的默认日志格式。尽可能对上两种模式的优点加以利用而避开它们的缺点
d.可以在global和session级别对binlog_format进行日志格式的操作,确保从库的复制能够正常进行
3.日志的读取:
a.mysqlbinlog工具
4.日志的删除:
a.reset master.可以删除所有的binlog日志
b.purge master logs to 'mysql-bin.*',将删除*编号前的所有日志
c.purge master logs before 'yyyy-mm-dd hh24:mi:ss',将删除日期为指定日期之前的所有日志
d.--expire_logs_days=#:设置日志的过期天数
5.其他选项:
a.--binlog-do-db=db_name:仅更新db_name数据库记录到二进制日志中而不更新其他数据库
b.--binlog-ignore-db=db_name:忽略db_name数据库记录到二进制日志中
c.--innodb-safe-binlog:与--sync-binlog=N(每写N次日志同步磁盘)一起配合使用,使得事务在日志中的记录更加安全
d.sql_log_bin=0:具有super权限的客户端可以通过设置此值使得禁止将自己的操作写入二进制记录。但有可能会导致主从数据不一致
6.日志的读取:查询日志记录的格式是纯文本,所以可以直接进行读取
7.慢查询日志:
a.记录了所有时间超过long_query_time的设置值并且扫描记录数不小于in_examined_row_limit的所有sql语句的日志
b.默认情况下,管理语句和不使用索引进行查询的语句不会记录到慢查询日志
c.--slow_query_log指定慢查询的状态,--show_query_log_file指定慢查询输出的路径,--log-out指定输出慢查询的方式(输出到表则只能精确到秒,输出到文件则能精确到微秒)
8.日志的读取:
a.查询long_query_time的值:show variables like 'long%';
b.set long_query_time:设置long_query_time的值
c.more localhost-slow.log:查看慢查询日志的值
9.其他查看日志的相关工具:
a.mysqlsla:查看日志
b.sqlprofi,mysql-expain-slow-log,mysqllogfilter:分析日志
二、实践:
mysql> use test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> create table emp( -> id int(11), -> info varchar(20) -> ) engine = innnodb charset = utf8; Query OK, 0 rows affected, 2 warnings (0.05 sec) mysql> insert into emp values(1,'z1'); Query OK, 1 row affected (0.00 sec) mysql> insert into emp values(1,'z2'); Query OK, 1 row affected (0.00 sec) mysql> exit abc@ubuntu:~/Downloads/mysql$ mysql -uroot -p123 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 98 Server version: 5.5.44-log Source distribution Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> mysql> show global variables like '%log%'; +-----------------------------------------+---------------------------------------+ | Variable_name | Value | +-----------------------------------------+---------------------------------------+ | back_log | 50 | | binlog_cache_size | 32768 | | binlog_direct_non_transactional_updates | OFF | | binlog_format | STATEMENT | | binlog_stmt_cache_size | 32768 | | expire_logs_days | 14 | | general_log | OFF | | general_log_file | /usr/local/mysql/data/ubuntu.log | | innodb_flush_log_at_trx_commit | 2 | | innodb_locks_unsafe_for_binlog | OFF | | innodb_log_buffer_size | 8388608 | | innodb_log_file_size | 67108864 | | innodb_log_files_in_group | 2 | | innodb_log_group_home_dir | ./ | | innodb_mirrored_log_groups | 1 | | log | OFF | | log_bin | ON | | log_bin_trust_function_creators | OFF | | log_error | /usr/local/mysql/data/mysql-error.log | | log_output | FILE | | log_queries_not_using_indexes | ON | | log_slave_updates | OFF | | log_slow_queries | ON | | log_warnings | 1 | | max_binlog_cache_size | 18446744073709547520 | | max_binlog_size | 1073741824 | | max_binlog_stmt_cache_size | 18446744073709547520 | | max_relay_log_size | 0 | | relay_log | | | relay_log_index | | | relay_log_info_file | relay-log.info | | relay_log_purge | ON | | relay_log_recovery | OFF | | relay_log_space_limit | 0 | | slow_query_log | ON | | slow_query_log_file | /usr/local/mysql/data/mysql-slow.log | | sql_log_bin | ON | | sql_log_off | OFF | | sync_binlog | 1 | | sync_relay_log | 0 | | sync_relay_log_info | 0 | +-----------------------------------------+---------------------------------------+ 41 rows in set (0.02 sec) -> Ctrl-C -- exit! Aborted abc@ubuntu:~/Downloads/mysql$ mysqld --verbose --help | grep -A 1 'Default options' 151106 15:37:14 [Warning] option 'table_definition_cache': unsigned value 100 adjusted to 400 151106 15:37:14 [Note] mysqld (mysqld 5.5.44-log) starting as process 76330 ... 151106 15:37:14 [Warning] Can't create test file /usr/local/mysql/data/ubuntu.lower-test 151106 15:37:14 [Warning] Can't create test file /usr/local/mysql/data/ubuntu.lower-test 151106 15:37:14 [Warning] One can only use the --user switch if running as root mysqld: File '/usr/local/mysql/data/mysql-bin.index' not found (Errcode: 13) Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 151106 15:37:14 [ERROR] Aborting abc@ubuntu:~/Downloads/mysql$ mysqld --verbose --help | grep -A 1 'Default options' 151106 15:37:32 [Warning] option 'table_definition_cache': unsigned value 100 adjusted to 400 151106 15:37:32 [Note] mysqld (mysqld 5.5.44-log) starting as process 76335 ... 151106 15:37:32 [Warning] Can't create test file /usr/local/mysql/data/ubuntu.lower-test 151106 15:37:32 [Warning] Can't create test file /usr/local/mysql/data/ubuntu.lower-test 151106 15:37:32 [Warning] One can only use the --user switch if running as root mysqld: File '/usr/local/mysql/data/mysql-bin.index' not found (Errcode: 13) Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 151106 15:37:32 [ERROR] Aborting //以下文件就是mysql的本机上的配置文件 abc@ubuntu:~/Downloads/mysql$ vi /usr/local/mysql/etc/my.cnf mysql> select count(*) from payment p left join customer c on p.payment_id = c.customer_id; +----------+ | count(*) | +----------+ | 16049 | +----------+ 1 row in set (0.06 sec) mysql> show variables like 'long%'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 2.000000 | +-----------------+----------+ 1 row in set (0.00 sec) mysql> set long_query_time = 0.05; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'long%'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 0.050000 | +-----------------+----------+ 1 row in set (0.00 sec) mysql> select count(*) from payment p left join customer c on p.payment_id = c.customer_id order by c.customer_id; +----------+ | count(*) | +----------+ | 16049 | +----------+ 1 row in set (0.07 sec) mysql> Ctrl-C -- exit! Aborted abc@ubuntu:/usr/local/mysql/data$ sudo tail ./mysql-slow.log [sudo] password for abc: # Time: 151106 23:40:39 # User@Host: root[root] @ localhost [] # Query_time: 0.047216 Lock_time: 0.000099 Rows_sent: 1 Rows_examined: 16650 SET timestamp=1446882039; select count(*) from payment p left join customer c on p.payment_id = c.customer_id; # Time: 151106 23:41:02 # User@Host: root[root] @ localhost [] # Query_time: 0.075027 Lock_time: 0.000083 Rows_sent: 1 Rows_examined: 32699 SET timestamp=1446882062; select count(*) from payment p left join customer c on p.payment_id = c.customer_id order by c.customer_id;

mysqloffersvariousStorageengines,每個suitedfordferentusecases:1)InnodBisidealForapplicationsNeedingingAcidComplianCeanDhighConcurncurnency,supportingtransactionsancions and foreignkeys.2)myisamisbestforread-Heavy-Heavywyworks,lackingtransactionsactionsacupport.3)記憶

MySQL中常見的安全漏洞包括SQL注入、弱密碼、權限配置不當和未更新的軟件。 1.SQL注入可以通過使用預處理語句防止。 2.弱密碼可以通過強制使用強密碼策略避免。 3.權限配置不當可以通過定期審查和調整用戶權限解決。 4.未更新的軟件可以通過定期檢查和更新MySQL版本來修補。

在MySQL中識別慢查詢可以通過啟用慢查詢日誌並設置閾值來實現。 1.啟用慢查詢日誌並設置閾值。 2.查看和分析慢查詢日誌文件,使用工具如mysqldumpslow或pt-query-digest進行深入分析。 3.優化慢查詢可以通過索引優化、查詢重寫和避免使用SELECT*來實現。

要監控MySQL服務器的健康和性能,應關注系統健康、性能指標和查詢執行。 1)監控系統健康:使用top、htop或SHOWGLOBALSTATUS命令查看CPU、內存、磁盤I/O和網絡活動。 2)追踪性能指標:監控查詢每秒數、平均查詢時間和緩存命中率等關鍵指標。 3)確保查詢執行優化:啟用慢查詢日誌,記錄並優化執行時間超過設定閾值的查詢。

MySQL和MariaDB的主要區別在於性能、功能和許可證:1.MySQL由Oracle開發,MariaDB是其分支。 2.MariaDB在高負載環境中性能可能更好。 3.MariaDB提供了更多的存儲引擎和功能。 4.MySQL採用雙重許可證,MariaDB完全開源。選擇時應考慮現有基礎設施、性能需求、功能需求和許可證成本。

MySQL使用的是GPL許可證。 1)GPL許可證允許自由使用、修改和分發MySQL,但修改後的分發需遵循GPL。 2)商業許可證可避免公開修改,適合需要保密的商業應用。

選擇InnoDB而不是MyISAM的情況包括:1)需要事務支持,2)高並發環境,3)需要高數據一致性;反之,選擇MyISAM的情況包括:1)主要是讀操作,2)不需要事務支持。 InnoDB適合需要高數據一致性和事務處理的應用,如電商平台,而MyISAM適合讀密集型且無需事務的應用,如博客系統。

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

WebStorm Mac版
好用的JavaScript開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。