错误日志
错误日志在启动 运行 关闭 过程进行了记录,遇到错误应该首先查看该日志
可通过命令查询错误日志文件位置:show variables like ‘log_error’
mysql> show variables like 'log_error' \g;
+---------------+---------------------+
| Variable_name | Value |
+---------------+---------------------+
| log_error | /var/log/mysqld.log |
+---------------+---------------------+
1 row in set (0.00 sec)
慢查询日志
用于定位出执行慢的sql语句,需要手动开启,默认mysql 实例不开启
可通过参数 long_query_time 进行设置,mysql 实例会记录执行超过这个阈值的sql
mysql> show variables like 'long_query_time'
-> \g;
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
log_slow_queries 参数用于开启 慢查询
检查sql语句是否有用到索引参数:log_queries_not_using_indexes
同时可以通过慢查询表 slow_log 查看,需将动态参数log_output 值设置为table
mysql> show create table mysql.slow_log \g;
| Table | Create Table
| slow_log | CREATE TABLE `slow_log` (
`start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
`user_host` mediumtext NOT NULL,
`query_time` time(6) NOT NULL,
`lock_time` time(6) NOT NULL,
`rows_sent` int(11) NOT NULL,
`rows_examined` int(11) NOT NULL,
`db` varchar(512) NOT NULL,
`last_insert_id` int(11) NOT NULL,
`insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`sql_text` mediumblob NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' |
mysql> show variables like 'log_output' \g
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE |
+---------------+-------+
mysql> set global log_output='table'
-> \g;
Query OK, 0 rows affected (0.00 sec)
查询日志
查询日志记录了所有请求信息,包括执行失败的,文件默认名是 主机名.log。
可以将查询日志记录放到mysql 架构下general_log 表中. 跟慢查询slow_log 一样。
二进制文件
二进制文件记录了对mysql数据库执行的所有更改操作,但不包括select ,show ,但有一种情况当操作本身没有改变数据库,也可能会记录到二进制文件
二进制文件的主要作用:
- 恢复
如:在一个数据库全备文件恢复后,可以通过日进制文件进行 piint_in_time恢复 - 复制
通过复制二进制文件,slave或 standby 能与master或primary进行数据实时同步 - 审计
通过二进制信息判断是否遭受注入攻击
查看二进制文件位置:
mysql> show variables like 'datadir' \g;
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)
mysql> system ls -lh /var/lib/mysql/;
总用量 185M
-rw-r-----. 1 mysql mysql 56 10月 9 10:53 auto.cnf
-rw-------. 1 mysql mysql 1.7K 10月 9 10:53 ca-key.pem
-rw-r--r--. 1 mysql mysql 1.1K 10月 9 10:53 ca.pem
-rw-r--r--. 1 mysql mysql 1.1K 10月 9 10:53 client-cert.pem
-rw-------. 1 mysql mysql 1.7K 10月 9 10:53 client-key.pem
-rw-r-----. 1 mysql mysql 2.2K 10月 22 18:02 ib_buffer_pool
-rw-r-----. 1 mysql mysql 76M 10月 23 11:16 ibdata1
-rw-r-----. 1 mysql mysql 48M 10月 23 11:16 ib_logfile0
-rw-r-----. 1 mysql mysql 48M 10月 21 17:07 ib_logfile1
-rw-r-----. 1 mysql mysql 12M 10月 23 09:09 ibtmp1
drwxr-x---. 2 mysql mysql 4.0K 10月 17 11:37 market_depth
drwxr-x---. 2 mysql mysql 4.0K 10月 9 10:53 mysql
srwxrwxrwx. 1 mysql mysql 0 10月 23 09:09 mysql.sock
-rw-------. 1 mysql mysql 5 10月 23 09:09 mysql.sock.lock
drwxr-x---. 2 mysql mysql 8.0K 10月 9 10:53 performance_schema
-rw-------. 1 mysql mysql 1.7K 10月 9 10:53 private_key.pem
-rw-r--r--. 1 mysql mysql 451 10月 9 10:53 public_key.pem
-rw-r--r--. 1 mysql mysql 1.1K 10月 9 10:53 server-cert.pem
-rw-------. 1 mysql mysql 1.7K 10月 9 10:53 server-key.pem
drwxr-x---. 2 mysql mysql 8.0K 10月 9 10:53 sys
mysql>
默认二进制文件没有起动,需要手动启动。启动后mysql性能可能会降低1%
以下参数影响着二进制文件的信息与行为:
- max_binlog_size
- binlog_cache_size
- sync_binlog
- binlog_do_db
- binlog_ignore_db
- log_update_update
- binlog_format
max_binlog_size : 为二进制文件的容量大小,默认为1G,每加一个后缀名+1,并记录到.index文件
binlog_cache_size :用于事务的缓存,当一个线程开启一个事务都会创建一个binlog_cache_size 大小的缓存,当事务未提交前日进制日志会记录到缓存中,该值需要谨慎设置因为是跟线程绑定,该值不能设置太少。太大非常消耗资源。默认值是32K
mysql> show variables like 'binlog_cache_size'
-> \g;
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| binlog_cache_size | 32768 |
+-------------------+-------+
1 row in set (0.00 sec)
binlog_cache_use 记录二进制缓存 写入次数
mysql> show global status like 'binlog_cache%' \g;
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Binlog_cache_disk_use | 0 |
| Binlog_cache_use | 0 |
+-----------------------+-------+
2 rows in set (0.00 sec)
sync_binlog: 表示写入多少次缓存就同步到磁盘,默认值为0。如果需要最高可用性将该值设置为NO。
假设设置为1,有可能导致问题发生,在一个事务发出commit前,由于sync_binlog为1,已经将二进制日志写入到磁盘了,而此时数据库down机了。在下次重起的时候。这个事务并没有提交,需要回滚,但因写入到了磁盘回滚失败。假设使用的是 innodb存储引擎 可以通过设置 innodb_support_xa 为1 进行解决。innodb_support_xa 能保证二进制日志跟存储引擎数据文件进行同步
binlog_do_db 和binlog_ignore_db : 表示需要写入或忽略写入那些库的日志,默认为空
log_update_update: 当前库为slave 时需要将主库master的二进制文件写入到当前库时需要设置log_update_update参数,虽然不写二进制文件到当前库还是能同步数据,除非搭建一主2从 master->slave->slave才设置该值
binlog_format: binlog_format参数详解