mysql-mmm架构详解
MySQL集群之五大常见的MySQL高可用方案(转)

MySQL集群之五⼤常见的MySQL⾼可⽤⽅案(转)1. 概述我们在考虑MySQL数据库的⾼可⽤的架构时,主要要考虑如下⼏⽅⾯:如果数据库发⽣了宕机或者意外中断等故障,能尽快恢复数据库的可⽤性,尽可能的减少停机时间,保证业务不会因为数据库的故障⽽中断。
⽤作备份、只读副本等功能的⾮主节点的数据应该和主节点的数据实时或者最终保持⼀致。
当业务发⽣数据库切换时,切换前后的数据库内容应当⼀致,不会因为数据缺失或者数据不⼀致⽽影响业务。
关于对⾼可⽤的分级在这⾥我们不做详细的讨论,这⾥只讨论常⽤⾼可⽤⽅案的优缺点以及⾼可⽤⽅案的选型。
2. ⾼可⽤⽅案2.1. 主从或主主半同步复制使⽤双节点数据库,搭建单向或者双向的半同步复制。
在5.7以后的版本中,由于lossless replication、logical多线程复制等⼀些列新特性的引⼊,使得MySQL原⽣半同步复制更加可靠。
常见架构如下:通常会和proxy、keepalived等第三⽅软件同时使⽤,即可以⽤来监控数据库的健康,⼜可以执⾏⼀系列管理命令。
如果主库发⽣故障,切换到备库后仍然可以继续使⽤数据库。
优点:1. 架构⽐较简单,使⽤原⽣半同步复制作为数据同步的依据;2. 双节点,没有主机宕机后的选主问题,直接切换即可;3. 双节点,需求资源少,部署简单;缺点:1. 完全依赖于半同步复制,如果半同步复制退化为异步复制,数据⼀致性⽆法得到保证;2. 需要额外考虑haproxy、keepalived的⾼可⽤机制。
2.2. 半同步复制优化半同步复制机制是可靠的。
如果半同步复制⼀直是⽣效的,那么便可以认为数据是⼀致的。
但是由于⽹络波动等⼀些客观原因,导致半同步复制发⽣超时⽽切换为异步复制,那么这时便不能保证数据的⼀致性。
所以尽可能的保证半同步复制,便可提⾼数据的⼀致性。
该⽅案同样使⽤双节点架构,但是在原有半同复制的基础上做了功能上的优化,使半同步复制的机制变得更加可靠。
MySQLMGR架构原理简介

MySQLMGR架构原理简介⼀、MGR架构原理简介状态机复制MGR本质上⼀个状态机复制的集群。
在状态机复制的架构中,数据库被当做⼀个状态机。
每⼀次写操作都会导致数据库的状态变化。
为了创建⼀个⾼可⽤的数据库集群,有⼀个组件,即事务分发器,将这些操作按照同样的顺序发送到多个初始状态⼀致的数据库上,让这些数据库执⾏同样的操作。
因为初始状态相同,每次执⾏的操作也相同,所以每次状态变化后各个数据库上的数据保持⼀致。
分布式的状态机复制事务分发器是⼀个单点,为了避免单点故障,可以采⽤分布式的状态机复制。
在分布式的状态机复制中,有多个事务分发器,它们彼此互相通信。
事务分发器可以同时接收事务请求,就像单个事务分发器同时接收事务请求⼀样。
从应⽤层来说,并发的事务发到同⼀个事务分发器和发到不同的事务分发器上效果是⼀样的。
事务分发器之间会互相通信,把所有的事务汇总、排序。
最终,每个事务分发器上都有⼀份完整的排好序的事务请求。
每个事务分发器只连接到⼀个数据库上,并负责把事务请求依次发送到相连的数据库上去执⾏,其就是⼀个分布式状态机复制的模型了。
分布式的⾼可⽤数据库将分布式的事务分发模块集成到数据库系统中,就变成了⼀个分布式的⾼可⽤数据库系统。
⽤户通过数据库的⽤户接⼝执⾏事务。
数据库收到事务请求后,⾸先交由事务分发模块处理。
事务分发模块将事务汇总排序,然后依次交由数据处理模块去执⾏这些事务。
如果去掉内部的细节,就会发现这是⼀个⾮常简洁的数据库集群⽅案。
MGR就是这样⼀个分布式的⾼可⽤MySQL系统。
⼆、MYSQL⾼可⽤的背景为了创建⾼可⽤数据库系统,传统的实现⽅式是创建⼀个或多个备⽤的数据库实例,原有的数据库实例通常称为主库master,其它备⽤的数据库实例称为备库或从库slave。
当master故障⽆法正常⼯作后,slave就会接替其⼯作,保证整个数据库系统不会对外中断服务。
master 与slaver的切换不管是主动的还是被动的都需要外部⼲预才能进⾏,这与数据库内核本⾝是按照单机来设计的理念悉悉相关,并且数据库系统本⾝也没有提供管理多个实例的能⼒,当slave数⽬不断增多时,这对数据库管理员来说就是⼀个巨⼤的负担。
MySQL-MMM实现MySQL高可用

MySQL-MMM实现MySQL⾼可⽤⼀、MMM简介MMM(Master-Master replication manager for MySQL)是⼀套⽀持双主故障切换和双主⽇常管理的脚本程序。
MMM使⽤Perl语⾔开发,主要⽤来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同⼀时刻只允许对⼀个主进⾏写⼊,另⼀台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM 这套脚本程序⼀⽅⾯实现了故障切换的功能,另⼀⽅⾯其内部附加的⼯具脚本也可以实现多个slave的read负载均衡。
MMM提供了⾃动和⼿动两种⽅式移除⼀组服务器中复制延迟较⾼的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。
由于MMM⽆法完全的保证数据⼀致性,所以MMM适⽤于对数据的⼀致性要求不是很⾼,但是⼜想最⼤程度的保证业务可⽤性的场景。
对于那些对数据的⼀致性要求很⾼的业务,⾮常不建议采⽤MMM这种⾼可⽤架构。
优点:1稳定和成熟的开源产品,经过了时间的考验核⼼技术是mysql⾃⼰的技术,只是使⽤脚本程序来控制,所以在原理上⽐较容易理解,⽽且管理能够更智能化。
2安装简单,配置简单,使⽤简单3功能强⼤(HA,failover,tools套件,cluster模式可以⼀个monitor管理多个mmm组)缺点:1由于架构⾥只有⼀个写⼊点,所以扩展性是有限的,但是对⼀般中型企业够⽤了。
解决⽅案:对于⼤应⽤可以采取垂直拆分到多个mmm架构的⽅式,使⽤mmm cluster来管理。
2 对于读写分离和读负载均衡还是要程序来开发或者使⽤其他⼯具完成。
⼆、架构及配置环境MySQL-MMM架构图:mysql-mmm运⾏机制:mysql-mmm安装需求Server n+1:N台安装mysql的机器和1台安装mmm monitor的机器。
2*(n+1)Ips:每个主机⼀个固定ip、⼀个虚拟IP(reader role),全局⼀个writer role IPMonitor User:⼀个可以在mmm monitor机器上使⽤的并且拥有REPLICATION,CLIENT权限的mysql⽤户Agent User:⼀个可以在mmm agent机器上使⽤的并且拥有super,replication,client,process权限的mysql⽤户Replication user:⼀个slaves主机上可以使⽤的并且有⽤replication slave权限的⽤户Tools user:⼀个mmm tools主机可以使⽤的,并且有⽤super,replication client,reload权限的mysql⽤户安装环境:1.⾓⾊:2.虚拟ip规划:3.hosts⽂件配置(全部机器):192.168.1.11 master-db1192.168.1.12 master-db2192.168.1.13 slave-db1192.168.1.14 slave-db2192.168.1.15 mmm-monitor4.其他:1关闭iptables2同步时间3配置yum和epel源三、安装MySQL并配置1.mysql安装 由于篇幅有限,安装步骤见⼩弟另⼀篇⽂章2.编辑配置⽂件/etc/f:master-db1[mysqld]server-id = 1datadir = /Data/apps/mysql-5.6.36/datalog-bin = /Data/apps/mysql-5.6.36/data/mysql-binbinlog_format = ROWrelay_log = /Data/apps/mysql-5.6.36/data/relay-logauto-increment-increment = 2auto-increment-offset = 1sync_binlog = 1sync_master_info = 1sync_relay_log = 1sync_relay_log_info = 1max_binlog_size = 100Mlog_slave_updates = 1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESmaster-db2[mysqld]server-id = 2datadir = /Data/apps/mysql-5.6.36/datalog-bin = /Data/apps/mysql-5.6.36/data/mysql-binbinlog_format = ROWrelay_log = /Data/apps/mysql-5.6.36/data/relay-logauto-increment-increment = 2auto-increment-offset = 2sync_binlog = 1sync_master_info = 1sync_relay_log = 1sync_relay_log_info = 1max_binlog_size = 100Mlog_slave_updates = 1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESslave-db1[mysqld]server-id = 3datadir = /Data/apps/mysql-5.6.36/datalog-bin = /Data/apps/mysql-5.6.36/data/mysql-binbinlog_format = ROWrelay_log = /Data/apps/mysql-5.6.36/data/relay-logsync_binlog = 1sync_master_info = 1sync_relay_log = 1sync_relay_log_info = 1max_binlog_size = 100Mlog_slave_updates = 1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESslave-db2[mysqld]server-id = 4datadir = /Data/apps/mysql-5.6.36/datalog-bin = /Data/apps/mysql-5.6.36/data/mysql-binbinlog_format = ROWrelay_log = /Data/apps/mysql-5.6.36/data/relay-logsync_binlog = 1sync_master_info = 1sync_relay_log = 1sync_relay_log_info = 1max_binlog_size = 100Mlog_slave_updates = 1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES3.重启以上四台mysql服务service mysqld restart4.在master-db1上创建mmm架构中需要的⽤户和权限[root@master-db1 ~]# mysqlWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is1Server version: 5.6.36-log MySQL Community Server (GPL).......Type 'help;' or '\h'for help. Type '\c' to clear the current input statement.mysql> GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.1.%' IDENTIFIED BY '123456';Query OK, 0 rows affected (0.19 sec)mysql> GRANT SUPER,REPLICATION CLIENT,PROCESS ON *.* TO 'mmm_agent'@'192.168.1.%' IDENTIFIED BY '123456';Query OK, 0 rows affected (0.00 sec)mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.1.%' IDENTIFIED BY '123456';Query OK, 0 rows affected (0.01 sec)5.查看⼆进制⽇志位置mysql> FLUSH TABLES WITH READ LOCK;Query OK, 0 rows affected (0.07 sec)mysql> SHOW MASTER STATUS;+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000001 | 796 | | | |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.05 sec)6.不要关闭这个mysql进程连接,避免锁失效,我们另起⼀个ssh连接db1服务器,进⾏数据库备份:[root@master-db1 ~]# mysqldump --all-databases > /tmp/database-backup.sql7.回到刚才mysql进程,进⾏解锁:mysql> UNLOCK TABLES;Query OK, 0 rows affected (0.05 sec)8.将database-backup.sql⽂件复制到其他db节点:[root@master-db1 ~]# scp /tmp/database-backup.sql master-db2:/tmp[root@master-db1 ~]# scp /tmp/database-backup.sql slave-db1:/tmp[root@master-db1 ~]# scp /tmp/database-backup.sql slave-db2:/tmp9.master-db,slave-db1,slave-db2三台主机导⼊sql⽂件,并刷新权限:[root@master-db2 ~]# mysql < /tmp/database-backup.sql[root@master-db2 ~]# mysql -e "FLUSH PRIVILEGES;"四、设置MySQL主-从和主-主配置1.在其他三台mysql上将master-db1设为主服务器[root@master-db2 ~]# mysqlmysql> CHANGE MASTER TO MASTER_HOST='192.168.1.11',MASTER_USER='replication',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS= Query OK, 0 rows affected, 2 warnings (0.11 sec)mysql> start slave;Query OK, 0 rows affected (0.11 sec)mysql> show slave status\G*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.1.11Master_User: replicationMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 796Relay_Log_File: relay-log.000002Relay_Log_Pos: 283Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes2.查看master-db2的master⽇志位置:mysql> SHOW MASTER STATUS;+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000001 | 636231 | | | |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)3.在master-db1上操作,将master-db2设置为主:mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.12',MASTER_USER='replication',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS= Query OK, 0 rows affected, 2 warnings (0.03 sec)mysql> start slave;Query OK, 0 rows affected (0.01 sec)mysql> show slave status\G;*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.1.12Master_User: replicationMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 636231Relay_Log_File: relay-log.000002Relay_Log_Pos: 283Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes五、安装MMM1.创建Tools useruseradd -s /sbin/nologin mmmd #所有机器2.查看mmm版本:yum list all|grep ^mysql-mmmmysql-mmm.noarch 2.2.1-2.el6 @epelmysql-mmm-agent.noarch 2.2.1-2.el6 @epelmysql-mmm-monitor.noarch 2.2.1-2.el6 epelmysql-mmm-tools.noarch 2.2.1-2.el6 epel3.在mmm-monitor上安装:[root@mmm-monitor ~]# yum -y install mysql-mmm-monitor4.在四台mysql服务器上安装:yum -y install mysql-mmm-agent5.编写配置⽂件,五台主机必须⼀致:[root@mmm-monitor ~]# vim /etc/mysql-mmm/mmm_common.confactive_master_role writer #积极的master⾓⾊的标⽰,所有的db服务器要开启read_only参数,对于writer服务器监控代理会⾃动将read_only属性关闭。
MySQL数据库原理及应用

MySQL数据库原理及应用MySQL是一种常见的关系型数据库管理系统,其原理和应用在现代计算机技术中扮演着至关重要的角色。
本文将从MySQL的原理、架构、基本语句、优化与应用等方面进行介绍,并探讨数据库管理所带来的经济效益。
一、MySQL数据库的原理MySQL数据库采用了客户端/服务器模式,即客户端每次向服务器发出请求,服务器便会相应地返回数据。
在MySQL服务启动时,服务端会阻塞一个进程等待客户端的请求,每当有客户端请求时,便为该请求激活一个新线程。
线程将负责处理该请求,之后将调用MySQL内部的API来与客户端进行交互,再将处理完的结果返回给客户端。
换而言之,MySQL服务在使用过程中相当于为每个客户端创建了一个线程。
MySQL数据库采用了存储引擎的架构,它允许用户灵活选择适合自己需求的存储引擎。
MySQL默认存储引擎为InnoDB,而另外一个常用的存储引擎为MyISAM。
InnoDB支持事务、外键、并发控制等特性,适用于高并发的OLTP应用,而MyISAM适用于少量的只读查询。
另外,MySQL数据库的基础数据结构为B+树,这是一种高效且灵活的数据结构,它允许对数据进行快速的插入、删除和查询。
对于MySQL的索引存储结构,B+树可以更好地适合查询和排序的要求。
二、MySQL数据库的基本语句MySQL常用的SQL语句有:SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER和DROP等语句。
SELECT语句是查询语句的核心,在查询中可以指定多个表之间的关联条件,也可以进行聚合计算和分组、排序等操作,支持多表连接和子查询等筛选功能。
INSERT语句用于将新行插入到表中,可以插入单个、多个或者默认值(不指定值)的行。
同时,该语句还可以插入数据到指定列中,以及使用INSERT INTO ... SELECT 形式将查询结果插入到表中。
UPDATE语句是用于更新表中一个或多个已有行的数据,可以使用WHERE子句过滤使用的行,也可以对应多表联接查询更新。
如何使用MySQL实现分布式数据库架构

如何使用MySQL实现分布式数据库架构引言在当今互联网时代,海量的数据处理和存储是一个无法回避的问题。
分布式数据库架构就是为了解决单一数据库无法满足高并发、高可用和数据安全性需求而产生的一种解决方案。
MySQL作为最常用的关系型数据库管理系统,也可以通过一些技术手段实现分布式架构。
本文将介绍如何使用MySQL实现分布式数据库架构,探讨其原理和实施方法。
一、分布式数据库架构原理概述分布式数据库架构是将数据分散存储在不同的物理节点上,通过网络进行通信协作,实现数据的共享和处理。
其主要原理包括数据分片、数据一致性和查询路由。
1. 数据分片数据分片是指将数据库的数据按照一定规则划分为多个片段,分散存储在多个节点上。
一般可以按照数据的某个字段进行分片,如根据用户ID进行取模分片。
数据分片可以提高数据库的并发处理能力和数据存储能力,减轻单个节点的压力。
2. 数据一致性数据一致性是分布式数据库架构中必须要解决的问题。
由于数据存储在不同的节点上,节点之间可能出现数据不一致的情况,例如数据写入后没有及时同步到其他节点。
常见的解决方案有强一致性和最终一致性。
强一致性要求数据在多个节点间是同步的,即读取数据时各节点返回的结果一致;最终一致性则容许数据在多个节点间存在一定的延迟,但最终数据会达到一致的状态。
3. 查询路由查询路由是指根据查询条件将查询请求发送到相应的数据库节点上。
在分布式数据库架构中,不同的节点可能存储不同的数据分片,因此需要智能地将查询路由到合适的节点上。
常见的查询路由策略有基于哈希的路由和基于区间的路由。
哈希路由将查询条件进行哈希计算后,将查询请求定向到相应的节点上;区间路由则根据数据分片的范围判断查询请求应该发送到哪个节点。
二、MySQL分布式数据库架构实践在实践中,可以使用MySQL Proxy、MySQL Cluster或者自定义中间件等技术手段实现MySQL分布式数据库架构。
下面将重点介绍两种常见的实践方法:MySQL Proxy和MySQL Cluster。
Mysql-高可用方案之MMM

Mysql-⾼可⽤⽅案之MMM ⼀、概述写库故障发⽣前:写库故障发⽣后:⼆、节点介绍本次实验采⽤4台虚拟机,操作系统版本Centos6.10,mysql版本5.7.25monitor 10.40.16.60 监控监控集群node1 10.40.16.61 主库提供写服务node2 10.40.16.62 主库提供读服务node3 10.40.16.63 从库提供读服务还须预留4个vip,不⽤⼿⼯配置,这⾥先提⼀下,后⾯的安装步骤⽤得到10.40.16.71 写vip10.40.16.72 读vip10.40.16.73 读vip10.40.16.74 读vip三、安装1. 配置双主⼀从node1(10.40.16.61)(root@localhost)(none)]> show slave status\G*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.40.16.62Master_User: replnode2(10.40.16.62)(root@localhost)[(none)]> show slave status\G*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.40.16.61Master_User: replnode3(10.40.16.63)(root@localhost)[(none)]> show slave status\G*************************** 1. row ***************************Slave_IO_State:Master_Host: 10.40.16.61Master_User: repl可以看到node1和node2互为主备,node3作为node1的备2. 下载扩展包(node1&node2&node3&monitor)编辑⽂件/etc/yum.repos.d/epel.repo将该⽂件的第三⾏取消注释,第四⾏添加注释,如下所⽰3. 安装MMM包每个数据库节点(node1&node2&node3)yum install -y mysql-mmm-agent.noarch监控节点(monitor)yum install -y mysql-mmm-*4. 创建相关账号在node1中创建以下账号监控账号(监控数据库状态)(root@localhost)[(none)]> grant replication client on *.* to 'mmm_monitor'@'%' identified by '123456';代理账号(MMM代理)(root@localhost)[(none)]> grant super, replication client, process on *.* to 'mmm_agent'@'%' identified by '123456';5. 修改配置⽂件所有中⽂的注释是要修改的地⽅,注意不要在配置⽂件中写任何注释在monitor中编辑/etc/mysql-mmm/mmm_mon.conf在monitor中编辑/etc/mysql-mmm/mmm_common.conf,传给其它三个节点,内容都⼀致scp /etc/mysql-mmm/mmm_common.conf 10.40.16.61:/etc/mysql-mmm/scp /etc/mysql-mmm/mmm_common.conf 10.40.16.62:/etc/mysql-mmm/scp /etc/mysql-mmm/mmm_common.conf 10.40.16.63:/etc/mysql-mmm/在node1&node2&node3中编辑/etc/mysql-mmm/mmm_agent.conf,更改'this db1',与mmm_common保持⼀致6. 启动node1&node2&node3[root@mysqla ~]# service mysql-mmm-agent start[root@mysqlb ~]# service mysql-mmm-agent start[root@mysqlc ~]# service mysql-mmm-agent startmonitor[root@monitor ~]# service mysql-mmm-monitor start7. 查看在monitor中[root@monitor ~]# mmm_control show # 查看集群状态[root@monitor ~]# mmm_control checks all # 查看更加具体的信息四、MMM优缺点优点:1. 提供读写vip2. 提供从服务器的延迟监控,在从服务器出现⼤量的主从延迟或主从链路中断时,可以把这台从服务器上的读的vip,飘移到集群中其它正常的节点上3. 提供主数据库故障转移后从服务器对新主的重新同步功能缺点:1. 发布时间较早,⽂档最后更新的时间是2012年,存在⼀些bug,并且不⽀持gtid服务功能2. 没有读负载均衡的功能3. 进⾏主从切换时,新主如果落后于旧主,容易造成新主的数据丢失。
MySQL数据库集群架构与部署指南

MySQL数据库集群架构与部署指南MySQL数据库是一种开源的关系型数据库管理系统,被广泛应用于各种规模的应用程序中。
随着数据量的增加和并发压力的增加,单个MySQL数据库的性能和可靠性可能会变得不足以满足需求。
因此,MySQL数据库集群架构的部署变得越来越重要。
本文将介绍MySQL数据库集群架构的基本概念和原理,并提供一份详细的部署指南,帮助读者理解和搭建自己的MySQL数据库集群。
## 1. MySQL数据库集群架构概述在了解MySQL数据库集群的部署指南之前,首先需要了解MySQL 数据库集群的概念和基本架构。
MySQL数据库集群是一个由多个MySQL数据库服务器组成的系统,共同处理数据库请求,提供高可用性和负载均衡。
MySQL数据库集群的架构可以分为以下几个关键组件:- 数据库服务器(Database Server):承担数据存储和处理任务的服务器,可以有一个或多个。
- 数据节点(Data Node):用于存储和处理实际数据的服务器。
- 管理节点(Management Node):负责管理整个集群的配置、监控和故障恢复。
- 存储引擎(Storage Engine):负责处理具体数据的访问和管理,如InnoDB、MyISAM等。
## 2. MySQL数据库集群部署前的准备在开始部署MySQL数据库集群之前,需要进行一些准备工作。
以下是准备工作的步骤和注意事项:### 2.1 硬件和网络环境评估评估和选择适合自己应用需求的硬件资源,包括CPU、内存、磁盘空间等。
同时,确保网络环境能够满足集群的数据传输需求,例如带宽、延迟等。
### 2.2 数据库备份与恢复策略制定合适的数据库备份与恢复策略,包括备份频率、备份存储位置、备份数据的完整性等。
这将极大地提高数据的可靠性和安全性。
### 2.3 安全措施采取适当的安全措施保护数据库集群的安全,例如访问控制、SSL加密、防火墙等。
### 2.4 数据库分区和复制策略根据自身业务需求,合理规划数据库的分区和复制策略,以提高性能和可用性。
mysql多主多从原理

MySQL多主多从原理详解1. 概述MySQL多主多从(Master-Master Replication)是一种数据库复制技术,通过在多个MySQL实例之间复制数据来提高数据库的可用性和性能。
它允许多个数据库实例同时作为主服务器(Master)和从服务器(Slave),可以同时读写数据,并且数据的变更会自动同步到其他服务器上。
多主多从架构的主要优势是提供了高可用性和负载均衡。
当一个主服务器出现故障时,其他服务器可以继续提供服务,避免了单点故障的风险。
同时,多个主服务器可以分担读写负载,提高数据库的性能。
在本文中,我们将详细解释MySQL多主多从的原理,包括复制过程、数据同步和冲突处理等方面。
2. 复制过程MySQL多主多从的复制过程主要包括以下几个步骤:2.1 主服务器记录二进制日志(Binary Log)在多主多从架构中,每个主服务器都会记录自己的二进制日志。
二进制日志是一种记录了数据库变更操作的日志文件,包括插入、更新和删除等操作。
主服务器将每个变更操作都写入二进制日志,并且按照顺序记录。
2.2 从服务器连接主服务器每个从服务器都会连接到一个或多个主服务器,建立复制连接。
从服务器通过连接主服务器的复制通道,获取主服务器上的二进制日志。
2.3 从服务器请求复制事件从服务器会向主服务器发送一个复制事件请求,请求获取主服务器上的二进制日志。
主服务器会将对应的二进制日志发送给从服务器。
2.4 从服务器应用复制事件从服务器接收到主服务器发送的二进制日志后,会将这些日志应用到自己的数据库中。
从服务器会按照日志的顺序逐个应用,确保数据的一致性。
2.5 从服务器记录中继日志(Relay Log)从服务器在应用主服务器的二进制日志时,会记录自己的中继日志。
中继日志是从服务器的二进制日志,它记录了从服务器接收并应用的主服务器的二进制日志。
2.6 从服务器成为主服务器在多主多从架构中,每个服务器都可以同时作为主服务器和从服务器。
数据库之MySQL集群方案策略(一)

数据库之MySQL集群⽅案策略(⼀)零、为什么需要群集? 在现在的科技环境下,我们的项⽬中往往会处理越来越多的数据量,随着数据量的递增,单⼀的数据库已经⽆法满⾜我们的业务要求,因此为了解决这⼀系列的数据库瓶颈,我们有了集群的搭建⽅案。
⼀、MySQL版本 引擎对⽐: 1、myisam没有事务⽀持 MariaDB针对MyISAM改进,Aria占⽤空间⼩,并且允许在系统之间轻松进⾏复制。
2、innodb提供事务⽀持,innodb在做任何操作时,会做⼀个⽇志操作,便于恢复。
它是MariaDB 10.2(以及MySQL)的默认存储引擎。
3、xtradb是innodb存储引擎的增强版本,拥有更⾼性能。
MariaDB在10.0.9版本起使⽤XtraDB来代替MySQL的InnoDB。
在MariaDB 10.1之前XtraDB是最佳选择,它是InnoDB的性能增强分⽀,并且是MariaDB 10.1之前的默认引擎。
版本对⽐: 1、Percona提供了⾼性能XtraDB引擎,还提供了PXC⾼可⽤解决⽅案,并且附带了percona-toolkit等DBA管理⼯具箱。
2、MariaDB在10.2.6版本⾥移除Percona XtraDB,换回默认InnoDB,现在10.5默认是InnoDB。
综合多年使⽤经验和性能对⽐,⾸选Percona分⽀,其次是MariaDB,如果你不想冒险,那就选择MYSQL官⽅版本。
推荐MariaDB⼆、Mysql群集⽅案 ⽅案⼀:共享存储 ⼀般共享存储采⽤⽐较多的是 SAN/NAS ⽅案。
SAN:共享存储,主库从库⽤的⼀个存储。
SAN的概念是允许存储设施和解决器(服务器)之间建⽴直接的⾼速连接,通过这种连接实现数据的集中式存储。
优点: 1、保证数据的强⼀致性; 2、与mysql解耦,不会由于mysql的逻辑错误发⽣数据不⼀致的情况; 缺点: 1、SAN价格昂贵; ⽅案⼆:操作系统实时数据块复制 这个⽅案的典型场景是 DRBD,DRBD架构(MySQL+DRBD+Heartbeat) DRDB:这是linux内核板块实现的快级别的同步复制技术。
彻底搞懂MySql及其底层原理(更新中...)

彻底搞懂MySql及其底层原理(更新中...)彻底搞懂MySql及其底层原理背景Mysql⽆疑是互联⽹公司⽤的最多的数据库了,它拥有开源、免费、学习成本低等优点,以⾄于被各⼤⼚商青睐。
理论上来说作为开发⼈员⽽不是专业的DB⼈员只需要掌握常⽤的增删改查命令以满⾜业务需求就⾏。
不过,由于互联⽹⾏业的兴起,导致了公司的业务越来越复杂,数据量越来越庞⼤,再加上程序员这⼀职业越来越受到⼈们的青睐,许多⼈纷纷通过各⼤培训机构转⾏,就连考研学⼦也称计算机专业为“宇宙机”,纷纷选择跨专业考研。
⽆疑是这⼀越来越内卷的现象,催⽣了众多公司对开发⼈员Mysql越来越⾼的要求。
如今,随便上某招聘⽹站搜索“Java开发⼯程师”职业要求,其中数据库⼀栏基本都是:熟练使⽤数据库,精通数据底层原理,索引数据结构,sql优化......当我第⼀次看到这些,⼼⾥⼀万个草泥马,你这是在招DB还是Java开发?我就会个增删改查还不⾏吗?如果你也有相似的经历,对Mysql还只停留在增删改查阶段,想要轻松通过Mysql相关⾯试或者单纯的想提升⾃⼰的sql认知⽔平。
相信本⽂会带给你⽿⽬⼀新的感觉。
Ps 本⼈虽然科班出⾝,却⾮常排斥满⽂专业术语让⼈⼀头雾⽔,所以全⽂我会尽量⽤⼤⽩话形式展现,在必要的时候会有⾃⼰的绘图以辅助让⽂字更容易理解MySql系统结构如何?如题可以看出,mysql主要有server层、存储引擎层、以及客户端层三⼤部门,我们主要了解前⾯两部分。
从Mysql的引擎说起存储引擎是Mysql的核⼼,Mysql的存储引擎是以插件的形式运⾏的,所以诞⽣了许多存储引擎,如InnoDB、MyISAM、MEMORY、ARCHIVE、CSV等⼗多种。
不过从mysql5.5开始,默认存储引擎就已经是InnoDB了,在之前是MyISAM,⽽我们仅仅只需要掌握这两种就⾏(重点还是InnoDB)MyISAM存储引擎:作为mysql5.5以及之前的默认引擎,它具有以下特点:(1)不⽀持事务;(2)不⽀持外键,如果强⾏增加外键,不会提⽰错误,只是外键不其作⽤;(3)对数据的查询缓存只会缓存索引,不会像InnoDB⼀样缓存数据,⽽且是利⽤操作系统本⾝的缓存;(4)默认的锁粒度为表级锁,所以并发度很差,加锁快,锁冲突较少,所以不太容易发⽣死锁;(5)⽀持全⽂索引(MySQL5.6之后,InnoDB存储引擎也对全⽂索引做了⽀持),但是MySQL的全⽂索引基本不会使⽤,对于全⽂索引,现在有其他成熟的解决⽅案,⽐如:ElasticSearch,Solr,Sphinx等。
MySQL高可用系列之MMMTools

MySQL高可用系列之MMM Tools一.简介前面,我们学习并搭建了一套MySQL-MMM集群典型应用环境,下面我们来熟悉一下它附带的工具箱--mmm_tools,它是依赖于MySQL-MMM集群架构工作的,包括如下三个子工具(位于/usr/sbin/目录下):●mmm_clone用来克隆MySQL数据库到其它机器,并且自动完成Master-Master或Master-Slave环境的搭建。
●mmm_backup用来备份MySQL数据库,备份的时候使用了LVM快照技术,所以支持热备份,并且锁定表的时间非常短,支持三种拷贝方式:scp、ssh-gz、rdiff,关于这三种方式,后面会详细介绍。
●mmm_restore还原数据到MySQL数据库,并完成Master-Master或Master-Slave环境搭建。
二.搭建环境为了学习MMM Tools,首先需要搭建一套环境。
(一)环境要求MMM Tools对MySQL-MMM集群环境有如下要求:●MMM Tools是依赖于MySQL-MMM集群架构工作的,所以首先要有一套MySQL-MMM环境。
●MySQL-MMM集群内的所有MySQL数据库版本要一致,只有这样才能做到Master-Master或Master-Slave复制的自动搭建,以及备份文件的自动恢复。
●由于MMM Tools是采用LVM逻辑卷快照功能执行备份的,所以要求集群内的MySQL数据库必须存放在LVM逻辑卷中(暂且称其为原始卷),并且要求原始卷所属的卷组除了原始卷使用的空间外,还需要剩余足够的空闲空间以创建快照逻辑卷(暂且称其为快照卷),快照卷的大小可以比原始卷小,其所需空间由原始卷以及备份(克隆)期间原始卷上数据块增量变化的大小决定,否则可能还未备份完成,快照卷已经因空间不足而失效。
备注:之前搭建MySQL-MMM时,已采用了统一的MySQL版本(5.5.17),并采用LVM存储MySQL数据库(结构见下表)。
MySQL高可用集群分享-5

userinfo2
MySQL Instance
APP
DAL
Cache userinfo1
MySQL Instance
userinfo
MySQL Instance
在V2.0的架构下,数据存储的瓶颈: 1.单实例单业务 依然存在V1.0所述瓶颈 遇到瓶颈时可以考虑往本文更高V版本升级, 若是读请求导致达到性能瓶颈可以考虑往 V3.0升级,其他瓶颈考虑往V4.0升级。
userinfo read
S
在V3.0的架构下,数据存储的瓶颈是什么? 1.写入量主库不能承受
V4.0 水平拆分
对于V2.0 V3.0方案遇到瓶颈时,都可以通过水平拆 分来解决,水平拆分和垂直拆分有较大区别,垂直 拆分拆完的结果,在一个实例上是拥有全量数据的, 而水平拆分之后,任何实例都只有全量的1/n的数据 ,以下图userinfo的拆分为例,将userinfo拆分为2 个cluster,每个cluster持有总量的1/2数据,2个 cluster数据的总和等于一份完整数据(注:这里不 再叫单个实例 而是叫一个cluster 代表包含主从的 一个小mysql集群)
V3.0 主从架构
此类架构主要解决V2.0架构下的读问题,通过给Instance挂 数据实时备份的思路来迁移读取的压力,在Mysql的场景下 就是通过主从结构,主库抗写压力,通过从库来分担读压力, 对于写少读多的应用,V3.0主从架构完全能够胜任。
userinfo read
S
APP
DAL
Cache userinfo write M
mysql-mmm组成与原理
Mysql-mmm的管理功能主要通过三个脚本来实现
1>mmm_mond 监控进程,负责所有的监控工作,决定和处理所有节点角色活动 。此脚 本需要在监管机上运行。
Mysql三高架构,高并发、高性能、高可用

Mysql三⾼架构,⾼并发、⾼性能、⾼可⽤mysql 三⾼⾼并发:同时处理的事务数⾼⾼性能:事务/SQL的执⾏速度⾼⾼可⽤:系统可⽤的时间⾼如何实现三⾼⾼并发:通过复制和扩展,将数据分散⾄多个节点⾼性能:复制提升速度,扩展提升容量⾼可⽤:节点间⾝份切换保证随时可⽤实现三⾼的⼿段复制⽬的:数据冗余⼿段:binlog传送收货:并发量提升、可⽤性提⾼问题:占⽤更多硬件资源扩展⽬的:扩展数据库容量⼿段:数据分⽚分库、分表收货:性能、并发量提升问题:可能降低可⽤性切换⽬的:提⾼可⽤性⼿段:主从⾝份切换收货:并发量提升问题:丢失切换时演进dble分了两个数据分⽚,每个数据分⽚都是⼀个独⽴的数据库集群,⼀主两备,MHA manager负责管理每⼀⽚的主备的健康,如果有问题的话,MHA manager负责主备的切换,⽽且MHA manager在主备切换的时候会通知DBLE,让DBLE的流量导到新上来的主库上去。
这个架构在很多公司或者云服务⼚商叫作DRDS,分布式数据库服务。
在⼏年前⽐如在阿⾥云买DRDS服务,现在阿⾥云没有这个服务了,其实阿⾥云就是提供⼀个类似架构的mysql集群。
问题:这么⼀个架构,说挂就挂!因为有⼀个单点问题,DBLE是单点的,⽐如DBLE宕机了,下⾯的数据库再健壮也没⽤,因为客户端连接的是DBLE,业务永远不可能只连接MYSQL A或者MYSQL B,因为MYSQL分库分表了,MYSQL A或者MYSQL B永远都是⼀部分数据,所以业务直接连上没有意义,必须通过DBLE,⽽DBLE单点的问题就是成了这个系统架构最薄弱的点。
搭建多个DBLE,每个DBLE都做相同的配置,配置它连接MYSQL A和MYSQL B,然后每个DBLE都可以独⽴的访问,这样其实不可以!因为分库分表了,虚拟表和虚拟数据库的信息是存在DBLE上的,进⼀步说每个表按照什么列分配的,⽐如按时间,三年前的放在A库,三年后的放在B库,这个信息怎么分,元数据是放在DBLE上,现在DBLE⼀个变成多个,它们之间的元数据如何同步?很难同步!⽐如业务要新建⼀个表,新的表的数据是存在DBLE上的,⽐如有什么字段,怎么分表,都是存在DBLE上,⽐如客户端连接的是第⼀个DBLE,第⼀个DBLE记录了创建新表,但另外两个不知道,下次别的客户端连接另外两个DBLE,另外两个DBLE都不知道有新表创建,所以说多个DBLE 之间的数据是需要同步的,⽐如让⼀个DBLE当主DBLE,其中的当备DBLE,可不是不可以,但DBLE可以借助zookeeper,zookeeper是⼀个经典的分布式协调服务,这个服务可以保存很多数据和元数据,⽽且在保存数据量不⼤的时候可以做到⾼可⽤,⽽且不需要DBLE从主复制到备的问题,任何的元数据都存到zookeeper上,遇到任何元数据的问题都从zookeeper拉回来,这样就⽤zookeeper存储表信息、分⽚等信息,当客户端在其中⼀个DBLE上创建新表插⼊了新数据或者修改了表的元数据的时候,DBLE会把数据存储到zookeeper集群⾥,然后另外的DBLE在需要元数据的时候,从zookeeper集群获取,这样就完美解决了多个DBLE节点数据同步问题。
mysql表结构定义

mysql表结构定义全文共四篇示例,供读者参考第一篇示例:MySQL是一种开源的关系型数据库管理系统,其表结构定义是指在MySQL中如何定义和设计数据库中的表格结构,包括表的字段、主键、外键等信息。
表结构定义对数据库的性能、数据完整性以及数据操作的效率都有着重要的影响,因此设计一个合理的表结构是数据库设计的一个重要环节。
在MySQL中,定义表结构首先需要确定表的名称,然后定义每个字段的类型、长度以及约束条件。
这些信息会保存在数据库中的information_schema库中,供MySQL进行查询优化和执行。
下面我将介绍一些常见的表结构定义要素及其设计原则。
1. 表名:表名应当具有适当的描述性,能够反映表的用途和内容。
遵循命名规范,使用小写字母和下划线进行分隔,以提高代码的可读性和维护性。
3. 字段类型:在定义字段时,应尽可能选择合适的字段类型。
常见的字段类型包括int、varchar、text等。
根据字段的实际用途和内容,选择合适的数据类型以节约存储空间和提高查询效率。
4. 主键:每张表都应该有一个主键,用于唯一标识每条记录。
通常情况下,主键为自增长整型,以确保数据的唯一性和快速查询。
5. 外键:在MySQL中,可以使用外键来建立表与表之间的关联关系。
外键可以确保数据的一致性,并避免不必要的数据冗余。
在定义外键时,需要建立适当的索引以提高查询效率。
6. 索引:索引是提高数据库查询性能的重要手段。
在MySQL中,可以通过在字段上建立索引来加快查询速度。
通常情况下,主键字段会默认建立索引,而非主键字段则需要手动添加索引。
在设计MySQL表结构时,需要根据具体业务需求来选择合适的表结构定义要素,避免过度规范或过度冗余。
合理的表结构设计可以提高数据的存储效率和查询效率,从而提升系统性能。
表结构定义也需要考虑数据库的可维护性和可扩展性,确保数据库能够随着业务的发展而不断优化和完善。
第二篇示例:MySQL是一种开源的关系型数据库管理系统,广泛应用于互联网应用、电子商务、企业信息系统等领域。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MySQL-mmm架构详解一、M MM架构介绍1.1 MySQL-MMM概述MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。
MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。
MMM不仅能提供浮动IP的功能,更可贵的是如果当前的主服务器挂掉后,会将你后端的从服务器自动转向新的主服务器进行同步复制,不用手工更改同步配置。
这个方案是目前比较成熟的解决方案。
1.2 MySQL-MMM优缺点优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性。
缺点:Monitor节点是单点,可以结合Keepalived实现高可用。
1.3 MySQL-MMM工作原理MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的)。
mmm_mond:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。
此脚本需要在监管机上运行。
mmm_agentd:运行在每个mysql服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置。
此脚本需要在被监管机上运行。
mmm_control:一个简单的脚本,提供管理mmm_mond进程的命令。
mysql-mmm的监管端会提供多个虚拟IP(VIP),包括一个可写VIP,多个可读VIP,通过监管的管理,这些IP会绑定在可用mysql之上,当某一台mysql宕机时,监管会将VIP迁移至其他mysql。
在整个监管过程中,需要在mysql中添加相关授权用户,以便让mysql可以支持监理机的维护。
授权的用户包括一个mmm_monitor用户和一个mmm_agent用户,如果想使用mmm 的备份工具则还要添加一个mmm_tools用户。
1.4 需求描述1.4.1 系统环境操作系统:CentOS 6.4_X64数据库:MySQL 5.5MMM:MySQL-MMM 2.2.11.4.2 IP分配虚拟IP地址(VIP):1.4.3 数据库用户权限1.5 MySQL-MMM架构图二、M ySQL M-M-S同步复制2.1 MySQL安装2.1.1检查系统是否安装过MYSQL# rpm -qa | grep mysql #如果有,使用以下命令先卸载#yum remove mysql*2.1.2下载MYSQL软件,编译安装,在四台机器上都需要做具体安装步骤见《mysql 5.5安装》2.2 DB配置2.2.1 M1配置1) 修改M1的f,确定有以下内容port = 3306server-id = 1log-bin=mysql-binlog-slave-updatessync_binlog=1auto_increment_increment=2auto_increment_offset=1skip-name-resolve2) 创建mysql复制用户GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.0.%' IDENTIFIED BY 'slave'; flush privileges;2.2.2 M2配置1)修改M2的f,确定有以下内容port = 3306server-id = 2log-bin=mysql-binlog-slave-updatessync_binlog=1auto_increment_increment=2auto_increment_offset=2skip-name-resolve2)创建mysql复制用户GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.0.%' IDENTIFIED BY 'slave'; flush privileges;2.2.3 slave1配置修改slave1的f,确定有以下内容port = 3306server-id = 3log-bin=mysql-binlog-slave-updatesskip-name-resolve2.2.4 monitor配置修改monitor的f,确定有以下内容Port = 3306server-id = 4log-bin=mysql-binlog-slave-updates2.3 同步数据2.3.1 锁表1)将M1数据库的表进行锁定,禁止服务器写入数据mysql> flush tables with read lock;2)确定同步复制POS起始位置mysql> show master status\G*************************** 1. row *************************** File: mysql-bin.000001Position: 409Binlog_Do_DB:Binlog_Ignore_DB:1 row in set (0.00 sec)2.3.2 导库将M1的数据导出,并复制到M2和slave1,然后分别导入到M2和slave1数据库2.4 配置复制关系2.4.1 配置M2复制M1的数据M2配置:mysql> CHANGE MASTER TO-> MASTER_HOST='192.168.0.65',-> MASTER_USER='slave',-> MASTER_PASSWORD='slave',-> MASTER_PORT=3306,-> MASTER_LOG_FILE='mysql-bin.000001',-> MASTER_LOG_POS=409,-> MASTER_CONNECT_RETRY=10;mysql> start slave;Query OK, 0 rows affected (0.00 sec)mysql> show slave status\G*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.0.65Master_User: slaveMaster_Port: 3306Connect_Retry: 10Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 409Relay_Log_File: mysql-relay-bin.000002Relay_Log_Pos: 251Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes2.4.2配置M1复制M2的数据M2的POS起始位置mysql> show master status\G*************************** 1. row *************************** File: mysql-bin.000001Position: 325Binlog_Do_DB:Binlog_Ignore_DB:M1配置:mysql> CHANGE MASTER TO-> MASTER_HOST='192.168.0.66',-> MASTER_USER='slave',-> MASTER_PASSWORD='slave',-> MASTER_PORT=3306,-> MASTER_LOG_FILE='mysql-bin.000001',-> MASTER_LOG_POS=325,-> MASTER_CONNECT_RETRY=10;Query OK, 0 rows affected (0.01 sec)mysql> start slave;Query OK, 0 rows affected (0.00 sec)mysql> show slave status\G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.0.66Master_User: slaveMaster_Port: 3306Connect_Retry: 10Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 325Relay_Log_File: zj14-relay-bin.000002Relay_Log_Pos: 251Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes2.4.2配置slave1复制M1的数据mysql> CHANGE MASTER TO-> MASTER_HOST='192.168.0.65',-> MASTER_USER='slave',-> MASTER_PASSWORD='slave',-> MASTER_PORT=3306,-> MASTER_LOG_FILE='mysql-bin.000001',-> MASTER_LOG_POS=409,-> MASTER_CONNECT_RETRY=10;mysql> start slave;Query OK, 0 rows affected (0.00 sec)mysql> show slave status\G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.0.65Master_User: slaveMaster_Port: 3306Connect_Retry: 10Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 409Relay_Log_File: mysql-relay-bin.000002Relay_Log_Pos: 251Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes2.5 M-M-S测试在M1的test目录建立一张表M1:mysql> use testDatabase changedmysql> create table t (id int(11) not null auto_increment,name varchar(30),primary key (id)); Query OK, 0 rows affected (0.00 sec)mysql> insert into t(name) values ('andy.feng');Query OK, 1 row affected (0.00 sec)mysql> select * from t;+----+-----------+| id | name |+----+-----------+| 1 | andy.feng |+----+-----------+1 row in set (0.00 sec)在M2上查询,并且也插入一条数据,到M1再查看,是否两边同步,并且注意id的值M2:mysql> use testDatabase changedmysql> select * from t;+----+-----------+| id | name |+----+-----------+| 1 | andy.feng |+----+-----------+1 row in set (0.00 sec)mysql> insert into t(name) values ('');Query OK, 1 row affected (0.00 sec)mysql> insert into t(name) values ('mysql-mmm');Query OK, 1 row affected (0.00 sec)mysql> select * from t;+----+-----------+| id | name |+----+-----------+| 1 | andy.feng || 2 | || 4 | mysql-mmm |+----+-----------+3 rows in set (0.00 sec)M1:mysql> select * from t;+----+-----------+| id | name |+----+-----------+| 1 | andy.feng || 2 | || 4 | mysql-mmm |+----+-----------+3 rows in set (0.00 sec)Slave1:mysql> use testDatabase changedmysql> select * from t;+----+-----------+| id | name |+----+-----------+| 1 | andy.feng || 2 | || 4 | mysql-mmm |+----+-----------+3 rows in set (0.00 sec)这样看来,master-master-slave复制是搭建成功了。