错误日志 error log 服务启动关闭
查询日志 query log
- 普通查询日志 general query log 客户端链接和SQL
- 慢查询日志 slow query log 执行时间超出指定值
二进制日志 binary log 记录数据被修改的相关信息
错误日志
vim /etc/my.cnf
[mysqld_safe]
log-error=/data/3306/mysql_oldboy3306.err
查询日志
mysql> show variables like ‘general_log%‘; //普通查询日志参数
+------------------+----------------------------------+
| Variable_name | Value |
+------------------+----------------------------------+
| general_log | OFF |
| general_log_file | /application/mysql/data/lnmp.log |
+------------------+----------------------------------+
mysql> set global general_log = ON;
慢查询:
long_query_time = 1 //超过(大于)1秒的记录,,,,默认10秒
log-slow-queries = /data/3306/slow.log
log-queries-not-using-indexes // 没有使用索引的查询也将被记录
log-long-format // 记录激活的更新日志、二进制更新日志、和慢查询日志的大量信息
log-short-format //少量信息
mysql> show global status like ‘%slow%‘;
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| Slow_launch_threads | 0 | //值较大 说明有些东西正在延迟链接的新线程
| long_query_time | 1.000000 |
| Slow_queries | 0 | //慢查询的记录数
| log_slow_queries | ON | //是否开启
+---------------------+-------+
2 rows in set (0.00 sec)
二进制日志
log-bin=mysql-bin
mysql> show variables like ‘%log_bin%‘;
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | ON |
| sql_log_bin | ON | //临时不记录binlog 用mysql恢复时,可以临时打开
+---------------------------------+-------+
binlog 日志的三种模式
statement level 每修改一条SQL的语句都会记录 不需要记录每一行的 变化
Row level 记录每一行数据修改的模式,然后在slave端再对相同的数据进行修改 bin-log日志大
mixed 上面 2种模式的混合
mysql> show variables like ‘%binlog_format%‘;
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
mysql> set global binlog_format = ‘ROW‘; //临时 全局改动 退出再进
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000004//查看ROW型 日志文件
binlog_format=mixed //修改my.cnf 官方推荐的模式
MyISAM引擎 重要参数:key_buffer_size = 2048M
- 不支持事务
- 表级锁定
- 读写互相堵塞
- 只会缓存索引
- 读写速度快,占用资源相对少
- 不支持外键约束,但支持全文索引
- 是5.5.5前缺省的存储引擎
调优精要
- 设置合适的索引
- 调整读写优先级,根据实际需求确保重要操作更优先执行
- 启用延迟插入改善大批量写入性能
- 尽量顺序操作让insert数据都写入到尾部,减少阻塞
- 分解大的时间长的操作,降低单个操作的阻塞时间
- 降低并发数,某些高并发场景通过应用进行 排队队列机制
- 对于相对静态的数据库数据,充分利用query_cache_size 或 memcached缓存服务可以极大的提高访问效率
- count只有在去全表扫描的时候特别搞笑 。 select count(*) from he.quan;
- 可以把主从同步的主库使用innodb, 从库使用MyISAM引擎(不推荐)。
data/mysql
-rw-rw---- 1 mysql mysql 10630 3月 28 01:04 user.frm //文件保存表的定义
-rw-rw---- 1 mysql mysql 1212 4月 6 07:20 user.MYD //数据文件
-rw-rw---- 1 mysql mysql 2048 4月 6 07:27 user.MYI //索引文件
mysql> show engines \G;
-rw-rw---- 1 mysql mysql 134217728 4月 7 02:15 ibdata1 //InnoDB的共享表空间
InnoDB引擎特点
- 支持事务 支持4个事务隔离级别 ACID
- 行级锁定
- 读写阻塞和事务隔离级别相关
- 具有 非常高效的缓存特性:能缓存索引,也能缓存数据。
- 整个 表和主键已cluster方式 存储,组成一颗平衡树
- 支持分区,表空间,类似oracle数据库
- 支持外键约束,不支持全文索引5.5以前,以后支持了。
- 对MyISAM比, 硬件资源要求比较高
调优精要
- 主键尽可能小
- 避免全表扫描,因为会使用表锁
- 尽可能缓存所有的索引和数据,提高响应速度,减少磁盘IO消耗
- 在大批量小插入的时候,尽量自己控制事务而不要使用autocommit自动提交
- 合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性,如果=0,log buffer 每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作。
- 避免主键更新,因为这会带来大量的数据移动
mysql> show engines; //引擎
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
/application/mysql/support-files/my-innodb-heavy-4G.cnf
innodb_buffer_pool_size = 2048M //缓存innodb表的索引,数据,插入数据时的缓冲 操作系统内存的70%-80%最佳。
修改引擎
mysql> alter table test engine = MyISAM; //修改test表的引擎。
/application/mysql/bin/mysql_convert_table_format --user=root --password=123456 -engine=MyISAM hequan test
yum install perl-ExtUtils-MakeMaker