YunHe.ME | 云和の小屋 - Mysql
type: channel
link: https://yunhe.me/tag/Mysql/
items: MySQL数据库MyISAM转换InnoDB方法
items: 清除MySQL二进制日志

MySQL数据库MyISAM转换InnoDB方法
type: item
date: 2015-04-09T17:47:00+08:00
description: MyISAM与InnoDB是mysql目前比较常用的两个数据库存储引擎，MyISAM与InnoDB的主要的不同点在于性能和事务控制上。这里简单的介绍一下两者间的区别和转换方法：MyISAM：MyISAM是MySQL5.5之前版本默认的数据库存储引擎。MYISAM提供高速存储和检索，以及全文搜索能力，适合数据仓库等查询频繁的应用。但不支持事务、也不支持外键。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。InnoDB：InnoDB是MySQL5.5版本的默认数据库存储引擎，不过InnoDB已被Oracle收购，MySQL自行开发的新存储引擎Falcon将在MySQL6.0版本引进。InnoDB具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎，InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。尽管如此，但是InnoDB包括了对事务处理和外来键的支持，这两点都是MyISAM引擎所没有的。MyISAM适合：做很多count 的计算；插入不频繁，查询非常频繁；没有事务。InnoDB适合：可靠性要求比较高，或者要求事务；表更新和查询都相当的频繁，并且表锁定的机会比较大的情况。性能较好的服务器，比如单独的数据库服务器，像阿里云的关系型数据库RDS就推荐使用InnoDB引擎。MySQL一般提供多种存储引擎，可以通过执行以下指令查看:首先进入MySQL命令行模式查看MySQL提供什么存储引擎:mysql> show engines;查看MySQL当前默认的存储引擎:mysql> show variables like '%storage_engine%';查询wpsql库mysql> use wpsql;列出当前库所有表名mysql> show tables;你要看wp_posts表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):mysql> show create table wp_posts;将wp_posts表修为InnoDB存储引擎(也可以此命令将InnoDB换为MyISAM)：mysql> ALTER TABLE wp_posts ENGINE=INNODB;如果要更改整个数据库表的存储引擎，一般要一个表一个表的修改，比较繁琐，可以采用先把数据库导出，得到SQL，把MyISAM全部替换为INNODB，再导入数据库的方式。转换完毕后重启mysqlservice mysqld restart

清除MySQL二进制日志
type: item
date: 2015-04-07T16:28:00+08:00
description: 二进制日志二进制日志记录了所有的DDL（数据定义语言）语句和DML（数据操作语言）语句，但是不记录包括数据查询的语句。语句以“事件”的形式保存，它描述了数据的更改过程，此日志对于灾难时的数据恢复起着极其重要的作用。日志的位置和格式当用--log-bin[=file_name]选项启动时，mysqld将包含所有更新数据的SQL命令写入日志文件。如果没有给出file_name值，默认名为主机名后面跟_bin，如果给出了文件名，但没有包含路劲，则文件默认被写入参数DATADIR（数据目录）指定的目录。。日志的读取由于日志以二进制的方式存储，不能直接读取，需要用mysqlbinlog工具来查看，语法如下：mysqlbinlog log_file日志的删除对于比较繁忙的OLTP系统，由于每天生产日志量大，这些日志如果长时间不清理，将会对磁盘空间带来很大的浪费，因此，定期删除日志是DBA维护Mysql数据库的一个重要工作内容，下面将介绍几种删除日志的常见方法。（1）执行“reset master;”命令，该命令将删除所有二进制日志，新日志的编号从“000001”开始，命令如下：Mysql>RESET MASTER;（2）执行“Purge master logs to ‘mysql-bin.’”命令，该命令将删除“”编号之前的所有日志，下列中删除了“mysql-bin.000001”之前编号的所有日志。Mysql>PURGE MASTER LOGS TO 'mysql-bin.000015';从结果中发现，编号000015之前的所有日志都已经删除（3）执行“purge master logs before ‘yyyy-mm-dd hh24:min:ss’”命令，该命令将删除日期为“yyyy-mm-dd hh24:mi:ss”之前产生的所有日志，下列中删除了日期在“2008-06-22 13:00:00”之前的所有日志。（4）设置参数—expire_logs_days=#(days)，此参数的含义是设置日志的过期天数，过来指定的天数后日志将会被自动删除，这样将有利于减少DBA管理日志的工作量。#vi /etc/my.cnf [mysqld] --expire_logs_days=3这样，3天前的日志都会被删除，系统自动删除。