3、启用新的更新日志
shellmysqladmin flush-logs
这样可以记录你备份后的数据改变为恢复数据准备 。
4、解除表的读锁
mysqlUNLOCK TABLES;
为了加速上述过程,你可以这样做:
shell mysqldump --lock-tables --opt db_namedb_name.sql; mysqladmin flush-logs
但是这样可能会有点小问题 。上命令在启用新的更新日志前就恢复表的读锁,
在更新繁忙的站点,可能有备份后的更新数据没有记录在新的日志中 。
现在恢复上面备份的数据库
1、对涉及的表使用写锁
mysqlLOCK TABLES tbl1 WRITE,tbl1 WRITE,…
2、恢复备份的数据
shellmysql db_namedb_name.sql
3、恢复更新日志的内容
shellmysql --one-database db_namehostname.nnn
假设需要使用的日志名字为hostname.nnn
4、启用新的更新日志
shellmysqladmin flush-logs
5、解除表的写锁
mysqlUNLOCK TABLES;
希望上面的例子能给你启发,因为备份数据的手法多种多样,你所使用的和上面所述可能大不一样,但是对于备份和恢复中,表的锁定、启用新的更新日志的时机应该是类似的,仔细考虑这个问题 。
MySQL数据库优化:
选择InnoDB作为存储引擎
大型产品的数据库对于可靠性和并发性的要求较高 , InnoDB作为默认的MySQL存储引擎,相对于MyISAM来说是个更佳的选择 。
优化数据库结构
组织数据库的schema、表和字段以降低I/O的开销,将相关项保存在一起 , 并提前规划,以便随着数据量的增长,性能可以保持较高的水平 。
设计数据表应尽量使其占用的空间最小化 , 表的主键应尽可能短 。·对于InnoDB表,主键所在的列在每个辅助索引条目中都是可复制的,因此如果有很多辅助索引,那么一个短的主键可以节省大量空间 。
仅创建你需要改进查询性能的索引 。索引有助于检索,但是会增加插入和更新操作的执行时间 。
InnoDB的ChangeBuffering特性
InnoDB提供了changebuffering的配置,可减少维护辅助索引所需的磁盘I/O 。大规模的数据库可能会遇到大量的表操作和大量的I/O,以保证辅助索引保持最新 。当相关页面不在缓冲池里面时,InnoDB的changebuffer将会更改缓存到辅助索引条目,从而避免因不能立即从磁盘读取页面而导致耗时的I/O操作 。当页面被加载到缓冲池时,缓冲的更改将被合并,更新的页面之后会刷新到磁盘 。这样做可提高性能,适用于MySQL5.5及更高版本 。
InnoDB页面压缩
InnoDB支持对表进行页面级的压缩 。当写入数据页的时候,会有特定的压缩算法对其进行压缩 。压缩后的数据会写入磁盘 , 其打孔机制会释放页面末尾的空块 。如果压缩失败,数据会按原样写入 。表和索引都会被压缩,因为索引通常是数据库总大小中占比很大的一部分,压缩可以显著节约内存,I/O或处理时间,这样就达到了提高性能和伸缩性的目的 。它还可以减少内存和磁盘之间传输的数据量 。MySQL5.1及更高版本支持该功能 。
注意,页面压缩并不能支持共享表空间中的表 。共享表空间包括系统表空间、临时表空间和常规表空间 。
使用批量数据导入
在主键上使用已排序的数据源进行批量数据的导入可加快数据插入的过程 。否则 , 可能需要在其他行之间插入行以维护排序,这会导致磁盘I/O变高,进而影响性能,增加页的拆分 。关闭自动提交的模式也是有好处的 , 因为它会为每个插入执行日志刷新到磁盘 。在批量插入期间临时转移唯一键和外键检查也可显著降低磁盘I/O 。对于新建的表,最好的做法是在批量导入后创建外键/唯一键约束 。
- mysql游标和存储过程是什么 mysql游标表名为变量
- 如何使用cmd命令行提示符登录mysql服务器 cmd中登陆mysql
- mysql怎么设置时区 mysql时间显示设置
- 招聘要精通mysql
- mysql 65535 8192 限制 mysql限制资源使用
- mysql有topn
- mysql协议包解析 mysqlicp协议
- mysql子查询和连接查询 mysql子查询插入
- Mysql使用索引查询 mysql使用round
- mysql下到了c盘 mysql怎么不存到c盘
