asp网站开发工具神器,打不开网页但是有网络,温州专业营销网站制作,石家庄live公众号MySQL5.6主从复制(读写分离)方案一、前言#xff1a;为什么MySQL要做主从复制(读写分离)#xff1f;通俗来讲#xff0c;如果对数据库的读和写都在同一个数据库服务器中操作#xff0c;业务系统性能会降低。为了提升业务系统性能#xff0c;优化用户体验#xff0c;可以通…MySQL5.6主从复制(读写分离)方案一、前言为什么MySQL要做主从复制(读写分离)通俗来讲如果对数据库的读和写都在同一个数据库服务器中操作业务系统性能会降低。为了提升业务系统性能优化用户体验可以通过做主从复制(读写分离)来减轻主数据库的负载。而且如果主数据库宕机可快速将业务系统切换到从数据库上可避免数据丢失。二、MySQL主从复制(读写分离)和集群的区别我对MySQL也是刚开始研究不是很专业。我的理解是1、主从复制(读写分离)一般需要两台及以上数据库服务器即可(一台用于写入数据一台用于同步主的数据并用于数据查询操作)。局限性(1)配置好主从复制之后同一张表只能对一个服务器写操作。如果在从上执行了写操作而之后主也操作了这张表或导致主从不同步据说可以配置成主主方式但我还没有研究到。(2)主数据库服务器宕机需要手动将业务系统切换到从数据库服务器。无法做到高可用性(除非再通过部署keepalive做成高可用方案)。2、集群是由N台数据库服务器组成数据的写入和查询是随机到任意一台数据库服务器的其他数据库服务器会自动同步数据库的操作。任何一台数据库宕机不会对整个集群造成大的影响。局限性我经过测试才知道目前mysql集群版本(MySQL Cluster)只能对NDB存储引擎的数据进行集群同步如果是INNODB或其他的MySQL存储引擎是不行的。这个也导致了我放弃了在业务系统中应用这种方案。三、回归正题接下来开始MySQL5.6.12的主从复制教程1、MySQL5.6开始主从复制有两种方式基于日志(binlog)基于GTID(全局事务标示符)。需要注意的是GTID方式不支持临时表所以如果你的业务系统要用到临时表的话就不要考虑这种方式了至少目前最新版本MySQL5.6.12的GTID复制还是不支持临时表的。所以此篇教程主要是告诉大家如何通过日志(binlog)方式做主从复制2、MySQL官方提供的MySQL Replication教程http://dev.mysql.com/doc/refman/5.6/en/replication.html这个官方教程强烈建议大家阅读(需要一定的英语阅读能力哦不行就google翻译后再阅读吧~)。3、准备工作(1)配置MySQL主从复制(读写分离)之前需要在主从两台服务器先安装好MySQL5.6。(2)目前最新的MySQL5.6 GA版本是MySQL5.6.12(点此下载MySQL5.6.12源码包)。个人推荐Linux(RedHat/CentOS 6.4)源码编译安装具体可以看本站这篇教程RedHat/CentOS源码编译安装MySQL5.6.12(3)注意(a)如果你需要用于生产环境安教程安装MySQL时不要急着做mysql启动操作。建议把mysql初始化生成的/usr/local/mysql/mysql.cnf删除然后把你优化好的mysql配置文件my.cnf放到/etc下。(b)建议主备两台服务器在同一局域网主备两台数据库网络需要互通。(4)我的环境主数据库IP192.168.100.2从数据库IP192.168.100.34、修改主数据库的的配置文件1 [mysqld]2 server-id13 log-binmysqlmaster-bin.log4 sync_binlog15 #注意下面这个参数需要修改为服务器内存的70%左右6 innodb_buffer_pool_size 512M7 innodb_flush_log_at_trx_commit18 sql_modeSTRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO9 lower_case_table_names110 log_bin_trust_function_creators1修改之后要重启mysql# /etc/init.d/mysql restart附一个我已优化过的主数据库配置文件点此下载5、修改从数据库的的配置文件(server-id配置为大于1的数字即可)1 [mysqld]2 server-id23 log-binmysqlslave-bin.log4 sync_binlog15 #注意下面这个参数需要修改为服务器内存的70%左右6 innodb_buffer_pool_size 512M7 innodb_flush_log_at_trx_commit18 sql_modeSTRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO9 lower_case_table_names110 log_bin_trust_function_creators1修改之后要重启mysql# /etc/init.d/mysql restart附一个我已优化过的从数据库配置文件点此下载6、SSH登录到主数据库(1)在主数据库上创建用于主从复制的账户(192.168.100.3换成你的从数据库IP)1 # mysql -uroot -p2 mysql GRANT REPLICATION SLAVE ON *.* TO repl192.168.100.3 IDENTIFIED BY repl;(2)主数据库锁表(禁止再插入数据以获取主数据库的的二进制日志坐标)mysql FLUSH TABLES WITH READ LOCK;(3)然后克隆一个SSH会话窗口在这个窗口打开MySQL命令行1 # mysql -uroot -p2 mysql SHOW MASTER STATUS;3 -------------------------------------------------------------------------------------4 | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |5 -------------------------------------------------------------------------------------6 | mysqlmaster-bin.000001 | 332 | | | |7 -------------------------------------------------------------------------------------8 1 row in set (0.00 sec)9 mysql exit;在这个例子中二进制日志文件是mysqlmaster-bin.000001位置是332记录下这两个值稍后要用到。(4)在主数据库上使用mysqldump命令创建一个数据快照#mysqldump -uroot -p -h127.0.0.1 -P3306 --all-databases --triggers --routines --events all.sql# 接下来会提示你输入mysql数据库的root密码输入完成后如果当前数据库不大很快就能导出完成。(5)解锁第(2)步主数据的锁表操作mysql UNLOCK TABLES;7、SSH登录到从数据库(1)通过FTP、SFTP或其他方式将上一步备份的主数据库快照all.sql上传到从数据库某个路径例如我放在了/home/yimiju/目录下(2)从导入主的快照# cd /home/yimiju# mysql -uroot -p -h127.0.0.1 -P3306 # 接下来会提示你输入mysql数据库的root密码输入完成后如果当前数据库不大很快就能导入完成。(3)给从数据库设置复制的主数据库信息(注意修改MASTER_LOG_FILE和MASTER_LOG_POS的值)# mysql -uroot -pmysql CHANGE MASTER TO MASTER_HOST192.168.100.2,MASTER_USERrepl,MASTER_PASSWORDrepl,MASTER_LOG_FILEmysqlmaster-bin.000001,MASTER_LOG_POS332;# 然后启动从数据库的复制线程mysql START slave;# 接着查询数据库的slave状态mysql SHOW slave STATUS \G# 如果下面两个参数都是Yes则说明主从配置成功Slave_IO_Running: YesSlave_SQL_Running: Yes(4)接下来你可以在主数据库上创建数据库、表、插入数据然后看从数据库是否同步了这些操作