一、MySQL5.6的新特性
MySQL5.6主要集中在优化查询性能、改进InnoDB支持高吞吐量事务、NoSQL式API、改进分区功能、改进数据复制、添加PERFORMANCE_SCHEMA库获取数据库性能信息等方面
1。查询性能优化
优化WHERE语句以提高索引条件的处理性能。多范围读取:通过随机数据访问提高SSD上的数据读取速度,优化文件排序。对于一些结合了ORDERBYnon_indexed_column和LIMITx的SQL语句,这个特性会大大加快这类语句的执行速度。
2。InnoDB的改进
MySQL5.6完全集成了InnoDB作为默认存储引擎。同时,使用InnoDB的许多细节在5.6版本中得到了改进。详情请看这里。
3。提供NoSQL风格的API
该函数主要适用于MySQL作为NoSQL,而MySQL使用memcached兼容的API。这个接口程序可以直接访问InnoDB存储引擎的数据,不需要将SQL转换成MySQL,大大提高了数据访问的性能。
4。分区的改进
显式分区数据查询,例如:
SELECT*FROMemployeesPARTITION(P0,p2);
从雇员分区(p0,p1)中删除;
UPDATEemployeesPARTITION(P0)SETstore_id=2,其中fname='Jill
SELECTe.id,s.cityFROMemployeesASeJOINstoresPARTITION(P1)ASs...;
导入导出分区数据,该函数用于快速迁移一个表到分区:altertablee用表E2交换分区P0;
5。复印功能的改进
支持多线程复制,实际上是为每个数据库启动对应的独立线程。也就是说,每个数据库都有一个单独的sql线程。如果在线业务只有一个数据库或者大部分压力集中在单个数据库上,那么多线程并发复制特性就没有意义。
启用GTID对于运维人员来说应该是一件值得高兴的事情。在配置主从复制时,传统的方式需要找到binlog和POS点,然后把主变指向它们,而不是有经验的运维,这样往往会导致主从同步复制出错。在mysql5.6中,你不再需要知道binlog和POS点。你只需要知道主的IP,端口,账号密码,因为同步复制是自动的,mysql通过内部机制GTID自动找一些同步。
6。极大地增强性能_模式数据库
减少了数据库开销、表IO的信息收集和监控、表锁信息收集和监控、会话和用户级监控以及全局性能信息汇总。
二。GITD详解
MySQL5.6的新特性之一是增加了全局事务ID(GTID),以加强主辅数据库的一致性、故障恢复和容错。
1。什么是GTID?
官方文档:http://dev.MySQL.com/doc/refman/5.6/en/replication-gtids.html在这个文档中,我们可以知道全局事务ID的官方定义是:GTID=source_id:transaction_id。
在MySQL5.6中,每个GTID代表一个数据库事务。在上面的定义中,source_id表示执行事务的主库uuid(server_uuid),transaction_id是从1开始的自增计数,表示在这个主库上执行的第n个事务。MySQL保证了事务和GTID之间1:1的映射。
例如,下面是一个GTID:3e11fa47-71CA-11e1-9e33-c80a9429562:50,它表示在MySQL实例上执行的第50个数据库事务,其中“3e1fa47-71CA-11e1-9e33-c80a9429562”是唯一的符号。很容易理解,只要每个数据库的server_uuid是全局唯一的,每个数据库生成的transaction_id也是唯一的,MySQL就能保证GTID的全局唯一性。
2。什么是server_uuid?
MySQL5.6用128位server_uuid替代了原来32位server_id的大部分功能。原因很简单。server_id依赖于my.cnf的手动配置,可能会造成冲突——而自动生成128位uuid的算法可以保证所有MySQLuuid不会冲突。
第一次启动时,MySQL会调用generate_server_uuid()自动生成一个server_uuid并保存到auto.cnf文件中——这个文件目前唯一的用途就是保存server_uuid。
MySQL再次启动时,会读取auto.cnf文件,继续使用上次生成的server_uuid。使用SHOW命令查看MySQL实例当前使用的server_uuid。:显示类似“server_uuid”的全局变量;是一个MySQL5.6全局变量,文档链接在这里:server_uuid?全局唯一server_uuid的一个好处是可以解决server_id配置冲突导致的MySQL主备复制异常终止(BUG#33815?)
在MySQL5.6中,Slave在向Master申请binlog时会先发送自己的server_uuid,Master会用Slave发送的server_uuid代替server_id(MySQL5.6之前的方式)作为kill_zombie_dump_threads的参数,终止冲突或死的BINLOG_DUMP线程。
三。多线程复制基于库
在MySQL5.6之前,同步复制是单线程的,排队的,只能一个一个执行。在5.6中,可以实现多个数据库之间的多线程复制。例如,在数据库中,存储了用户表、商品表、价格表和订单表。然后每个业务表单独放在一个数据库里,然后就可以实现多线程复制了。但是,数据库表的多线程复制是无效的。
注意:每个数据库只能使用一个线程。多线程复制只有在复制涉及多个数据库时才有意义。
四。MySQL5.6复制管理工具
官方下载地址:http://dev.mysql.com/downloads/tools/utilities/#downloads
注:下面简单介绍一下。使用了具体的工具,没有具体的解释。使用方法命令-—帮助。
Mysqlreplicate快速启动复制。
Mysqlrplcheck快速检查复制环境
Mysqlrplshow显示了复制拓扑
Mysqlfailover故障转移
Mysqlrpladmim管理工具
五、具体配置流程
1。环境准备
*** 作系统
CentOS6.6x86_64
软件发布
Mysql5.6.22
2。实验拓扑
3。关闭防火墙和SELinux
# serverice iptables stop # chkconfig iptables off # sed -i ‘s/%SELINUX=enforcing%SELINUX=disabled%’/etc/sysconfig/selinux # getenforce 04、配置MySQL主从复制
A.配置选项的描述
要使用MySQL5.6中的复制功能,至少应在其服务配置部分[mysqld]中定义以下选项:
b、配置主服务器
# vim /usr/my.cnf将以下内容添加到[mysqld]:
skip-external-locking key_buffer_size= 256M max_allowed_packet= 1M table_open_cache= 256 sort_buffer_size= 1M read_buffer_size= 1M read_rnd_buffer_size= 4M myisam_sort_buffer_size= 64M thread_cache_size= 8 query_cache_size=16M thread_concurrency= 2 log-bin=mysql-bin innodb_file_per_table= 1 binlog-format=ROW //设置二进制日志格式 log-slave-updates=true//是否记录从服务器同步数据动作 gtid-mode=on //启用Gtid模式 enforce-gtid-consistency=true//是否强制GTID的一致性 master-info-repository=TABLE //master信息的记录位置 relay-log-info-repository=TABLE //中继日志信息的记录位置 sync-master-info=1 slave-parallel-workers=2 //设置从服务器复制线程数 binlog-checksum=CRC32//设置binlog校验算法(循环冗余校验码) master-verify-checksum=1 //设置主服务器是否校验 slave-sql-verify-checksum=1//设置从服务器是否校验 binlog-rows-query-log_events=1 server-id = 10 report-port=3306 report-host=192.168.100.90 //设置报告给哪台服务器,一般设置为本机的主机名。c、在从服务器上安装MySQL和在主服务器上安装Mysql是一样的,这里不做介绍。但是,在从服务器上安装MySQL有两个与主服务器不同的参数。如下所示:
server-id=11 report-host=192.168.100.91d、在主服务器上为从服务器创建一个复制用户并测试连接
mysql> grant replication slave,replication client on *.*to 'replication'@'192.168.%.%' identified by 'passwd'; mysql> flush privileges;
E.启动从属复制线程。
从服务器 *** 作。
mysql> changemaster to master_host='192.168.100.90',master_user='replication',master_password='passwd',master_auto_position=1; mysql> start slave; mysql> show status\G;好了,现在您可以在主计算机上创建数据库了。看看是否有来自。。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)