Hướng dẫn does mysql have a log file? - mysql có tệp nhật ký không?

Các tệp nhật ký MySQL

MySQL có một số tệp nhật ký khác nhau có thể giúp bạn tìm hiểu những gì đang diễn ra bên trong MySQLD:mysqld:

Nhật ký tệp

Sự mô tả

Nhật ký lỗi

Vấn đề gặp phải khi bắt đầu, chạy hoặc dừng MySQLD.mysqld.

Nhật ký isam

Ghi lại tất cả các thay đổi cho các bảng ISAM. Chỉ được sử dụng để gỡ lỗi mã ISAM.

Nhật ký truy vấn

Thiết lập kết nối và truy vấn thực hiện.

Nhật ký cập nhật

Không dùng nữa: Lưu trữ tất cả các câu lệnh thay đổi dữ liệu.

Nhật ký nhị phân

Lưu trữ tất cả các tuyên bố thay đổi một cái gì đó. Cũng được sử dụng để nhân rộng.

Nhật ký chậm

Lưu trữ tất cả các truy vấn đã mất nhiều hơn Long_Query_Time để thực thi hoặc không sử dụng các chỉ mục.long_query_time to execute or didn’t use indexes.

Tất cả các nhật ký có thể được tìm thấy trong thư mục dữ liệu MySQLD. Bạn có thể buộc MySQLD mở lại các tệp nhật ký (hoặc trong một số trường hợp chuyển sang nhật ký mới) bằng cách thực thi nhật ký Flush. Xem Phần 4.5.3.mysqld data directory. You can force mysqld to reopen the log files (or in some cases switch to a new log) by executing FLUSH LOGS. See Section 4.5.3.

Nhật ký lỗi

MySQLD ghi tất cả các lỗi vào stderr, mà tập lệnh an toàn_mysqld chuyển hướng đến một tệp có tên là 'hostName'.err. (Trên Windows, MySQLD viết điều này trực tiếp vào \mysql\data\mysql.err.) writes all errors to the stderr, which the safe_mysqld script redirects to a file called 'hostname'.err. (On Windows, mysqld writes this directly to \mysql\data\mysql.err.)

Điều này chứa thông tin cho biết khi nào MySQLD được bắt đầu và dừng lại và cũng có bất kỳ lỗi nghiêm trọng nào được tìm thấy khi chạy. Nếu MySQLD chết bất ngờ và an toàn_MYSQLD cần khởi động lại MySQLD, Safe_MysQLD sẽ viết một hàng MySQLD đã khởi động lại trong tệp này. Nhật ký này cũng giữ một cảnh báo nếu MySQLD thông báo một bảng cần được tự động kiểm tra hoặc sửa chữa.mysqld was started and stopped and also any critical errors found when running. If mysqld dies unexpectedly and safe_mysqld needs to restart mysqld, safe_mysqld will write a restarted mysqld row in this file. This log also holds a warning if mysqld notices a table that needs to be automatically checked or repaired.

Trên một số hệ điều hành, nhật ký lỗi sẽ chứa một dấu vết ngăn xếp có thể được sử dụng để tìm ra nơi MySQLD chết. Xem Phần D.1.4.mysqld died. See Section D.1.4.

Nhật ký truy vấn chung

Nếu bạn muốn biết điều gì xảy ra trong MySQLD, bạn nên bắt đầu với -log [= file]. Điều này sẽ ghi nhật ký tất cả các kết nối và truy vấn vào tệp nhật ký (theo mặc định có tên 'hostname'.log). Nhật ký này có thể rất hữu ích khi bạn nghi ngờ một lỗi ở khách hàng và muốn biết chính xác những gì MySQLD nghĩ rằng khách hàng đã gửi cho nó.mysqld, you should start it with --log[=file]. This will log all connections and queries to the log file (by default named 'hostname'.log). This log can be very useful when you suspect an error in a client and want to know exactly what mysqld thought the client sent to it.

Theo mặc định, tập lệnh mysql.server khởi động máy chủ MySQL với tùy chọn -L. Nếu bạn cần hiệu suất tốt hơn khi bạn bắt đầu sử dụng MySQL trong môi trường sản xuất, bạn có thể xóa tùy chọn -L khỏi mysql.server hoặc thay đổi nó thành -log -bin.mysql.server script starts the MySQL server with the -l option. If you need better performance when you start using MySQL in a production environment, you can remove the -l option from mysql.server or change it to --log-bin.

Các mục trong nhật ký này được viết khi MySQLD nhận được các câu hỏi. Điều này có thể khác với thứ tự mà các câu lệnh được thực thi. Điều này trái ngược với nhật ký cập nhật và nhật ký nhị phân được viết sau khi truy vấn được thực thi, nhưng trước khi bất kỳ khóa nào được phát hành.mysqld receives the questions. This may be different from the order in which the statements are executed. This is in contrast to the update log and the binary log which are written after the query is executed, but before any locks are released.

Nhật ký cập nhật

Lưu ý: Nhật ký cập nhật được thay thế bằng nhật ký nhị phân. Xem Phần 4.9.4. Với điều này, bạn có thể làm bất cứ điều gì bạn có thể làm với nhật ký cập nhật.: the update log is replaced by the binary log. See Section 4.9.4. With this you can do anything that you can do with the update log.

Khi bắt đầu với tùy chọn-log-update [= file_name], MySQLD ghi một tệp nhật ký chứa tất cả các lệnh SQL cập nhật dữ liệu. Nếu không có tên tệp được đưa ra, nó mặc định là tên của máy chủ. Nếu một tên tệp được đưa ra, nhưng nó không chứa một đường dẫn, tệp được viết trong thư mục dữ liệu. Nếu file_name không có tiện ích mở rộng, MySQLD sẽ tạo tên tệp nhật ký như vậy: file_name.###, trong đó ### là một số được tăng lên mỗi khi bạn thực thi mysqladmin làm mới Khởi động lại máy chủ.--log-update[=file_name] option, mysqld writes a log file containing all SQL commands that update data. If no filename is given, it defaults to the name of the host machine. If a filename is given, but it doesn’t contain a path, the file is written in the data directory. If file_name doesn’t have an extension, mysqld will create log file names like so: file_name.###, where ### is a number that is incremented each time you execute mysqladmin refresh, execute mysqladmin flush-logs, execute the FLUSH LOGS statement, or restart the server.

Lưu ý: Để sơ đồ trước hoạt động, bạn không được tạo tệp của riêng mình với cùng tên tệp với nhật ký cập nhật + một số tiện ích mở rộng có thể được coi là một số, trong thư mục được sử dụng bởi nhật ký cập nhật!: For the previous scheme to work, you must not create your own files with the same filename as the update log + some extensions that may be regarded as a number, in the directory used by the update log!

Nếu bạn sử dụng các tùy chọn -log hoặc -L, MySQLD ghi một nhật ký chung với tên tệp là hostname.log. Khởi động lại và làm mới không khiến tệp nhật ký mới được tạo (mặc dù nó đã được đóng và mở lại). Trong trường hợp này, bạn có thể sao chép nó (trên UNIX) bằng cách làm:--log or -l options, mysqld writes a general log with a filename of hostname.log. Restarts and refreshes do not cause a new log file to be generated (although it is closed and reopened). In this case you can copy it (on Unix) by doing:

mv hostname.log hostname-old.log
mysqladmin flush-logs
cp hostname-old.log to-backup-directory
rm hostname-old.log

Cập nhật ghi nhật ký là thông minh vì nó chỉ ghi lại các câu lệnh thực sự cập nhật dữ liệu. Vì vậy, một bản cập nhật hoặc xóa với một nơi không tìm thấy hàng không được ghi vào nhật ký. Nó thậm chí còn bỏ qua các câu lệnh Cập nhật đặt một cột thành giá trị mà nó đã có.UPDATE or a DELETE with a WHERE that finds no rows is not written to the log. It even skips UPDATE statements that set a column to the value it already has.

Việc ghi nhật ký cập nhật được thực hiện ngay sau khi hoàn thành truy vấn nhưng trước khi bất kỳ khóa nào được phát hành hoặc bất kỳ cam kết nào được thực hiện. Điều này đảm bảo rằng nhật ký sẽ được đăng nhập theo thứ tự thực hiện.

Nếu bạn muốn cập nhật cơ sở dữ liệu từ các tệp nhật ký cập nhật, bạn có thể thực hiện như sau (giả sử nhật ký cập nhật của bạn có tên của biểu mẫu file_name.###):

shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql

LS được sử dụng để có được tất cả các tệp nhật ký theo đúng thứ tự. is used to get all the log files in the right order.

Điều này có thể hữu ích nếu bạn phải hoàn nguyên các tệp sao lưu sau khi gặp sự cố và bạn muốn làm lại các bản cập nhật xảy ra giữa thời gian sao lưu và sự cố.

Nhật ký cập nhật nhị phân

Ý định là nhật ký nhị phân nên thay thế nhật ký cập nhật, vì vậy chúng tôi khuyên bạn nên chuyển sang định dạng nhật ký này càng sớm càng tốt!

Nhật ký nhị phân chứa tất cả thông tin có sẵn trong nhật ký cập nhật ở định dạng hiệu quả hơn. Nó cũng chứa thông tin về thời gian mỗi truy vấn cập nhật cơ sở dữ liệu mất bao lâu.

Nhật ký nhị phân cũng được sử dụng khi bạn đang sao chép một nô lệ từ một bậc thầy. Xem Phần 4.10.

Khi bắt đầu với tùy chọn-log-bin [= file_name], MySQLD ghi một tệp nhật ký chứa tất cả các lệnh SQL cập nhật dữ liệu. Nếu không có tên tệp nào được đưa ra, nó mặc định là tên của máy chủ theo sau là -bin. Nếu một tên tệp được đưa ra, nhưng nó không chứa một đường dẫn, tệp được viết trong thư mục dữ liệu.--log-bin[=file_name] option, mysqld writes a log file containing all SQL commands that update data. If no filename is given, it defaults to the name of the host machine followed by -bin. If a filename is given, but it doesn’t contain a path, the file is written in the data directory.

Nếu bạn cung cấp một phần mở rộng cho--log-bin = fileName.extension, tiện ích mở rộng sẽ được xóa âm thầm.--log-bin=filename.extension, the extension will be silently removed.

Đối với tên tệp nhật ký nhị phân, MySQLD sẽ nối thêm một tiện ích mở rộng là một số được tăng lên mỗi khi bạn thực hiện làm mới mysqladmin, thực hiện các bản ghi hình flush mysqladmin, thực thi câu lệnh FLUFL Nhật ký hoặc khởi động lại máy chủ. Một nhật ký nhị phân mới cũng sẽ tự động được tạo khi nó đạt đến MAX_BIN_LOG_SIZE. Bạn có thể xóa tất cả các tệp nhật ký nhị phân không hoạt động bằng lệnh đặt lại. Xem Phần 4.5.4.mysqld will append an extension that is a number that is incremented each time you execute mysqladmin refresh, execute mysqladmin flush-logs, execute the FLUSH LOGS statement, or restart the server. A new binary log will also automatically be created when it reaches max_bin_log_size. You can delete all inactive binary log files with the RESET MASTER command. See Section 4.5.4.

Bạn có thể sử dụng các tùy chọn sau cho MySQLD để ảnh hưởng đến những gì được ghi vào nhật ký nhị phân:mysqld to affect what is logged to the binary log:

Quyền mua

Sự mô tả

binlog-do-db=database_name

Nói với Master rằng nó nên đăng nhập cập nhật cho cơ sở dữ liệu được chỉ định và loại trừ tất cả các loại khác không được đề cập rõ ràng. .binlog-do-db=some_database.)

binlog-ignore-db=database_name

Nói với Master rằng các bản cập nhật cho cơ sở dữ liệu đã cho không nên được ghi vào nhật ký nhị phân. .binlog-ignore-db=some_database.)

Để xác định các tệp nhật ký nhị phân khác nhau đã được sử dụng, MySQLD cũng sẽ tạo một tệp chỉ mục nhật ký nhị phân chứa tên của tất cả các tệp nhật ký nhị phân được sử dụng. Theo mặc định, điều này có cùng tên với tệp nhật ký nhị phân, với phần mở rộng '.index'. Bạn có thể thay đổi tên của tệp chỉ mục nhật ký nhị phân bằng tùy chọn-log-bin-index = [fileName].mysqld will also create a binary log index file that contains the name of all used binary log files. By default this has the same name as the binary log file, with the extension '.index'. You can change the name of the binary log index file with the --log-bin-index=[filename] option.

Nếu bạn đang sử dụng sao chép, bạn không nên xóa các tệp nhật ký nhị phân cũ cho đến khi bạn chắc chắn rằng sẽ không có nô lệ nào cần sử dụng chúng. Một cách để làm điều này là thực hiện các bản ghi hình Flush Mysqladmin mỗi ngày một lần và sau đó xóa bất kỳ nhật ký nào được hơn 3 ngày tuổi.mysqladmin flush-logs once a day and then remove any logs that are more than 3 days old.

Bạn có thể kiểm tra tệp nhật ký nhị phân bằng lệnh mysqlbinlog. Ví dụ: bạn có thể cập nhật máy chủ MySQL từ nhật ký nhị phân như sau:mysqlbinlog command. For example, you can update a MySQL server from the binary log as follows:

mysqlbinlog log-file | mysql -h server_name

Bạn cũng có thể sử dụng chương trình mysqlbinlog để đọc nhật ký nhị phân trực tiếp từ máy chủ MySQL từ xa!mysqlbinlog program to read the binary log directly from a remote MySQL server!

mysqlbinlog -Help sẽ cung cấp cho bạn thêm thông tin về cách sử dụng chương trình này! will give you more information on how to use this program!

Nếu bạn đang sử dụng BEGIN [Work] hoặc đặt AutoCommit = 0, bạn phải sử dụng nhật ký nhị phân MySQL cho bản sao lưu thay vì nhật ký cập nhật cũ.BEGIN [WORK] or SET AUTOCOMMIT=0, you must use the MySQL binary log for backups instead of the old update log.

Việc ghi nhật ký nhị phân được thực hiện ngay sau khi hoàn thành truy vấn nhưng trước khi bất kỳ khóa nào được phát hành hoặc bất kỳ cam kết nào được thực hiện. Điều này đảm bảo rằng nhật ký sẽ được đăng nhập theo thứ tự thực hiện.

Tất cả các bản cập nhật (cập nhật, xóa hoặc chèn) thay đổi bảng giao dịch (như bảng BDB) được lưu trữ cho đến khi cam kết. Bất kỳ cập nhật nào cho bảng không chuyển đổi đều được lưu trữ trong nhật ký nhị phân cùng một lúc. Mỗi chủ đề sẽ, khi bắt đầu, phân bổ một bộ đệm của binlog_cache_size cho các truy vấn bộ đệm. Nếu một truy vấn lớn hơn thế này, luồng sẽ mở một tệp tạm thời để xử lý bộ đệm lớn hơn. Tệp tạm thời sẽ bị xóa khi luồng kết thúc.UPDATE, DELETE, or INSERT) that change a transactional table (like BDB tables) are cached until a COMMIT. Any updates to a non-transactional table are stored in the binary log at once. Every thread will, on start, allocate a buffer of binlog_cache_size to buffer queries. If a query is bigger than this, the thread will open a temporary file to handle the bigger cache. The temporary file will be deleted when the thread ends.

Max_binlog_cache_size có thể được sử dụng để hạn chế tổng kích thước được sử dụng để lưu trữ truy vấn đa chuyển.max_binlog_cache_size can be used to restrict the total size used to cache a multi-transaction query.

Nếu bạn đang sử dụng bản cập nhật hoặc nhật ký nhị phân, các phần chèn đồng thời sẽ không hoạt động cùng với Tạo ... Chèn và Chèn ... Chọn. Điều này là để đảm bảo rằng bạn có thể tạo lại một bản sao chính xác của các bảng của mình bằng cách áp dụng nhật ký vào bản sao lưu.CREATE ... INSERT and INSERT ... SELECT. This is to ensure that you can re-create an exact copy of your tables by applying the log on a backup.

Nhật ký truy vấn chậm

Khi bắt đầu với tùy chọn-log-slow-queries [= file_name], MySQLD ghi một tệp nhật ký chứa tất cả các lệnh SQL mất nhiều hơn Long_query_time để thực thi. Thời gian để có được các khóa bảng ban đầu không được tính là thời gian thực hiện.--log-slow-queries[=file_name] option, mysqld writes a log file containing all SQL commands that took more than long_query_time to execute. The time to get the initial table locks is not counted as execution time.

Nhật ký truy vấn chậm được ghi lại sau khi truy vấn được thực thi và sau khi tất cả các khóa đã được phát hành. Điều này có thể khác với thứ tự mà các câu lệnh được thực thi.

Nếu không có tên tệp nào được đưa ra, nó mặc định là tên của máy chủ được hậu tố với -slow.log. Nếu một tên tệp được đưa ra, nhưng không chứa một đường dẫn, tệp được viết trong thư mục dữ liệu.-slow.log. If a filename is given, but doesn’t contain a path, the file is written in the data directory.

Nhật ký truy vấn chậm có thể được sử dụng để tìm các truy vấn mất nhiều thời gian để thực hiện và do đó là ứng cử viên để tối ưu hóa. Với một bản ghi lớn, điều đó có thể trở thành một nhiệm vụ khó khăn. Bạn có thể đặt nhật ký truy vấn chậm thông qua lệnh mysqldumpslow để có được một bản tóm tắt các truy vấn xuất hiện trong nhật ký.mysqldumpslow command to get a summary of the queries that appear in the log.

Nếu bạn đang sử dụng-LOG-Long Format, các truy vấn không sử dụng chỉ mục cũng được in. Xem Phần 4.1.1.--log-long-format, queries that are not using indexes are also printed. See Section 4.1.1.

Bảo trì tập tin nhật ký

MySQL có rất nhiều tệp nhật ký, giúp dễ dàng thấy những gì đang diễn ra. Xem Phần 4.9. Tuy nhiên, đôi khi, người ta phải dọn dẹp sau khi MySQL để đảm bảo rằng các bản ghi don don chiếm quá nhiều không gian đĩa.MySQL to ensure that the logs don’t take up too much disk space.

Khi sử dụng MySQL với các tệp nhật ký, thỉnh thoảng bạn sẽ muốn xóa/sao lưu các tệp nhật ký cũ và bảo MySQL bắt đầu đăng nhập vào các tệp mới. Xem Phần 4.4.1.

Trên cài đặt Linux (Redhat), bạn có thể sử dụng tập lệnh MySQL-Log-Rotate cho việc này. Nếu bạn đã cài đặt MySQL từ phân phối RPM, tập lệnh nên được cài đặt tự động. Lưu ý rằng bạn nên cẩn thận với điều này nếu bạn đang sử dụng nhật ký để sao chép!RedHat) installation, you can use the mysql-log-rotate script for this. If you installed MySQL from an RPM distribution, the script should have been installed automatically. Note that you should be careful with this if you are using the log for replication!

Trên các hệ thống khác, bạn phải tự cài đặt một tập lệnh ngắn mà bạn bắt đầu từ Cron để xử lý các tệp nhật ký.cron to handle log files.

Bạn có thể buộc MySQL bắt đầu bằng cách sử dụng các tệp nhật ký mới bằng cách sử dụng các bản ghi hình flush mysqladmin hoặc bằng cách sử dụng nhật ký Flush lệnh SQL. Nếu bạn đang sử dụng MySQL phiên bản 3.21, bạn phải sử dụng mysqladmin làm mới.mysqladmin flush-logs or by using the SQL command FLUSH LOGS. If you are using MySQL Version 3.21 you must use mysqladmin refresh.

Lệnh trước thực hiện như sau:

  • Nếu ghi nhật ký tiêu chuẩn (--log) hoặc ghi nhật ký truy vấn chậm (--log-slow-meries) được sử dụng, nó sẽ đóng và mở lại tệp nhật ký (____10 và

    shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql
    1 làm mặc định).--log) or slow query logging (--log-slow-queries) is used, it closes and reopens the log file (
    shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql
    0 and
    shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql
    1 as default).

  • Nếu đăng nhập cập nhật (--log-update) được sử dụng, nó sẽ đóng nhật ký cập nhật và mở tệp nhật ký mới với số thứ tự cao hơn.--log-update) is used, it closes the update log and opens a new log file with a higher sequence number.

Nếu bạn chỉ sử dụng nhật ký cập nhật, bạn chỉ phải xóa nhật ký và sau đó chuyển đi các tệp nhật ký cập nhật cũ sang bản sao lưu. Nếu bạn đang sử dụng ghi nhật ký bình thường, bạn có thể làm một cái gì đó như:

shell> cd mysql-data-directory
shell> mv mysql.log mysql.old
shell> mysqladmin flush-logs

và sau đó lấy một bản sao lưu và xóa

shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql
2.

Tệp nhật ký MySQL ở đâu?

Lỗi, truy vấn chậm và nhật ký nhị phân được bật theo mặc định, nhưng nhật ký truy vấn chung không được bật.Vị trí mặc định cho mỗi nhật ký là thư mục dữ liệu MySQL (C: \ ProgramData \ MySQL \ MySQL Server [Số phiên bản] \ Data \) và tên nhật ký mặc định được dựa trên tên thiết bị của máy tính.C:\ProgramData\MySQL\MySQL Server [version number]\Data\), and the default log names are based on the computer's device name.

MySQL có nhật ký giao dịch không?

Nhật ký giao dịch trong MySQL không được bật theo mặc định và phải được bật để ghi nhật ký giao dịch.Để xác định xem nhật ký giao dịch có hoạt động hay không, bạn có thể sử dụng câu lệnh SHOW SHOW DEGS DIGS: Hiển thị nhật ký nhị phân;Nếu ghi nhật ký nhị phân bị vô hiệu hóa, bạn sẽ nhận được một lỗi cho biết, bạn không sử dụng ghi nhật ký nhị phân.. To determine if the transaction log is active you can use the “show binary logs” statement: SHOW BINARY LOGS; If binary logging is disabled you will receive an error stating “you are not using binary logging”.

Nhật ký trong MySQL là gì?

Hàm log () trả về logarit tự nhiên của một số được chỉ định hoặc logarit của số vào cơ sở được chỉ định.