[关闭]
@cdmonkey 2015-01-04T07:16:22.000000Z 字数 16038 阅读 1011

Amoeba

数据库


一、简介

以下内容来自于官方在线文档:http://docs.hexnova.com/amoeba/

Amoeba(变形虫)项目,该开源框架于2008年开始发布一款Amoeba for MySQL软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当SQL路由功能,专注于分布式数据库代理层开发。座落于客户端与数据库服务器之间,对客户端透明。具有负载均衡、高可用性、SQL过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能,目前已在很多企业的生产线上面使用。

此处输入图片的描述

Amoeba处于在客户端和数据库之间,扮演一个中介的角色,将客户端应用传递过来的SQL语句经过分析后,将写的语句交给主库执行,将读的语句路由到从库执行(当然也可以到主库读,这个完全看配置)。

Amoeba实现了简单的负载均衡(采用轮询算法)和Failover。如果配置了多个读的库,则任何一个读的库出现宕机,不会导致整个系统故障,Amoeba能自动将读请求路由到其他可用的库上,当然,写还是单点的依赖于主数据库的,这个需要通过数据库的切换,或者水平分割等技术来提升主库的可用性。

为何要使用Amoeba?

随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上。这时集中式数据库系统表现出它的不足:集中式处理,势必造成性能瓶颈;应用程序集中在一台计算机上运行,一旦该计算机发生故障,则整个系统受到影响,可靠性不高;集中式处理引起系统的规模和配置都不够灵活,系统的可扩充性差。在这种形势下,集中式数据库将向分布式数据库发展。而Amoeba的透明、简易配置及多个优点使其成为分布式数据库代理产品中的优秀选择。

二、安装与配置

这是我们本次架构的环境:

此处输入图片的描述

1. 安装Java SE环境

Amoeba框架是基于Java SE1.5开发的,建议使用该版本,我们这里下载的是“jdk-6u32-linux-x64-rpm.bin”。

  1. [root@Amoeba tools]# sh jdk-6u32-linux-x64-rpm.bin
  2. #将会被安装到/usr/java/jdk1.6.0_32:
  3. [root@Amoeba tools]# ll /usr/java/
  4. total 4
  5. lrwxrwxrwx 1 root root 16 Dec 31 11:48 default -> /usr/java/latest
  6. drwxr-xr-x 7 root root 4096 Dec 31 11:48 jdk1.6.0_32
  7. lrwxrwxrwx 1 root root 21 Dec 31 11:48 latest -> /usr/java/jdk1.6.0_32

2. 安装Amoeba

下载安装Amoeba
http://sourceforge.net/projects/amoeba/files/

  1. [root@Amoeba tools]# mkdir /usr/local/amoeba
  2. [root@Amoeba tools]# tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
  3. [root@Amoeba tools]# ll /usr/local/amoeba/
  4. total 60
  5. drwxr-xr-x 2 root root 4096 Dec 31 11:55 benchmark
  6. drwxr-xr-x 2 root root 4096 Feb 29 2012 bin
  7. -rw-r--r-- 1 root root 3976 Aug 29 2012 changelogs.txt
  8. drwxr-xr-x 2 root root 4096 Dec 31 11:55 conf
  9. drwxr-xr-x 3 root root 4096 Dec 31 11:55 lib
  10. -rw-r--r-- 1 root root 34520 Aug 29 2012 LICENSE.txt
  11. -rw-r--r-- 1 root root 2031 Aug 29 2012 README.html

配置环境变量:

  1. [root@Amoeba ~]# vim ~/.bash_profile
  2. PATH=$PATH:$HOME/bin:/usr/local/amoeba/bin
  3. JAVA_HOME=/usr/java/jdk1.6.0_32
  4. export JAVA_HOME
  5. export PATH
  6. #加载配置文件,立即生效:
  7. [root@Amoeba ~]# . ~/.bash_profile

安正安装结果:

  1. #安装完成后,你可以通过命令确定是否成功安装,当出现如下提示,表示Amoeba可以正常启动。
  2. [root@Amoeba ~]# amoeba
  3. amoeba start|stop

3. 配置Amoeba for mysql

配置Amoeba的数据库读写分离主要涉及两个文件:

文件 说明
/usr/local/amoeba/conf/dbServers.xml Amoeba作为数据库代理层,它一定会和很多数据库保持通信,因此它必须知道如何与由它代理的数据库进行连接,比如最基础的:主机IP、端口、Amoeba使用的用户名和密码等等,这些信息存储在该文件中。
/usr/local/amoeba/conf/amoeba.xml 此文件定义了Amoeba代理的相关配置。

3.1 配置服务器节点

以下是配置一个DB节点,使用Amoeba做操作转发的步骤:

  1. [root@Amoeba-A ~]# vim /usr/local/amoeba/conf/dbServers.xml
  2. <?xml version="1.0" encoding="gbk"?>
  3. <!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd">
  4. <amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/">
  5. <!-- Each dbServer needs to be configured into a Pool, If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration:
  6. add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig such as 'multiPool' dbServer -->
  7. <!-- 数据库连接配置的公共部分:-->
  8. <dbServer name="abstractServer" abstractive="true"> [1]
  9. <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
  10. <property name="manager">${defaultManager}</property> [2]
  11. <property name="sendBufferSize">64</property>
  12. <property name="receiveBufferSize">128</property>
  13. <!-- mysql port -->
  14. <property name="port">3306</property>
  15. <!-- mysql schema -->
  16. <property name="schema">test</property>
  17. <!-- mysql user -->
  18. <property name="user">root</property>
  19. <!-- mysql password -->
  20. <property name="password">oldboy123</property>
  21. </factoryConfig>
  22. <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool"> [3]
  23. <property name="maxActive">500</property>
  24. <property name="maxIdle">500</property>
  25. <property name="minIdle">10</property>
  26. <property name="minEvictableIdleTimeMillis">600000</property>
  27. <property name="timeBetweenEvictionRunsMillis">600000</property>
  28. <property name="testOnBorrow">true</property>
  29. <property name="testOnReturn">true</property>
  30. <property name="testWhileIdle">true</property>
  31. </poolConfig>
  32. </dbServer>
  33. <!--下面的这部分主要定义主库,从库,以及从库连接池。这里只定义数据库地址,它们的用户及密码就是上面的公共部分设置。注意用来连接真实MySQL服务器的用户必须拥有远程连接权限。-->
  34. <dbServer name="Master" parent="abstractServer"> <!-- 拓展数据库服务器实例,这里为定义主库 -->
  35. <factoryConfig>
  36. <!-- mysql ip -->
  37. <property name="ipAddress">172.16.1.19</property> <!-- 这里是主库高可用的虚拟地址 -->
  38. </factoryConfig>
  39. </dbServer>
  40. <dbServer name="Slave1" parent="abstractServer">
  41. <factoryConfig>
  42. <!-- mysql ip -->
  43. <property name="ipAddress">172.16.1.17</property>
  44. </factoryConfig>
  45. </dbServer>
  46. <dbServer name="Slave2" parent="abstractServer">
  47. <factoryConfig>
  48. <!-- mysql ip -->
  49. <property name="ipAddress">172.16.1.18</property>
  50. </factoryConfig>
  51. </dbServer>
  52. <!-- 最后这部分是将上面定义的从库添加到一个虚拟的组里面,对外提供读的功能,同时实现负载均衡:-->
  53. <dbServer name="multiPool" virtual="true"> [4]
  54. <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
  55. <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
  56. <property name="loadbalance">1</property>
  57. <!-- Separated by commas,such as: server1,server2,server1 -->
  58. <property name="poolNames">Slave1,Slave2</property>
  59. </poolConfig>
  60. </dbServer>
  61. </amoeba:dbServers>

由此,你大概可以理解定义abstractServer的原因:当我们有一个数据库集群需要管理,这个数据库集群中节点的大部分信息可能是相同的,比如:端口号、用户名、密码等等。因此通过归纳这些共性定义出的该配置模块将会极大地简化其下的dbServers配置文件。

3.2 配置代理

客户端连接Amoeba时所绑定的IP地址、端口、用户名和密码,以及IP访问限制。

  1. [root@Amoeba-A ~]# vim /usr/local/amoeba/conf/amoeba.xml
  2. <?xml version="1.0" encoding="gbk"?>
  3. <!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
  4. <amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">
  5. <proxy>
  6. <!-- service class must implements com.meidusa.amoeba.service.Service -->
  7. <service name="Amoeba" class="com.meidusa.amoeba.net.ServerableConnectionManager"> [1]
  8. <!-- port -->
  9. <property name="port">3306</property> [2] <!-- 为了方便应用程序访问,将端口改为3306 -->
  10. <!-- bind ipAddress -->
  11. <property name="ipAddress">172.16.1.30</property>
  12. <property name="manager">${clientConnectioneManager}</property>
  13. <property name="connectionFactory">
  14. <bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory">
  15. <property name="sendBufferSize">128</property>
  16. <property name="receiveBufferSize">64</property>
  17. </bean>
  18. </property>
  19. <property name="authenticator"> [3] <!--这里定义连接Amoeba时用来验证的用户及密码。这里的用户跟数据库的用户无关,是应用程序访问阿米巴代理连接数据库时的用户,是阿米巴的用户。-->
  20. <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
  21. <property name="user">oldboy</property>
  22. <property name="password">oldboy123</property>
  23. <property name="filter">
  24. <bean class="com.meidusa.amoeba.server.IPAccessController">
  25. <property name="ipFile">${amoeba.home}/conf/access_list.conf</property>
  26. </bean>
  27. </property>
  28. </bean>
  29. </property>
  30. </service>
  31. <!-- server class must implements com.meidusa.amoeba.service.Service -->
  32. <service name="Amoeba Monitor Server" class="com.meidusa.amoeba.monitor.MonitorServer">
  33. <!-- port -->
  34. <!-- default value: random number
  35. <property name="port">9066</property>
  36. -->
  37. <!-- bind ipAddress -->
  38. <property name="ipAddress">127.0.0.1</property>
  39. <property name="daemon">true</property>
  40. <property name="manager">${clientConnectioneManager}</property>
  41. <property name="connectionFactory">
  42. <bean class="com.meidusa.amoeba.monitor.net.MonitorClientConnectionFactory"></bean>
  43. </property>
  44. </service>
  45. <runtime class="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext"> [4]
  46. <!-- proxy server net IO Read thread size -->
  47. <property name="readThreadPoolSize">20</property>
  48. <!-- proxy server client process thread size -->
  49. <property name="clientSideThreadPoolSize">30</property>
  50. <!-- mysql server data packet process thread size -->
  51. <property name="serverSideThreadPoolSize">30</property>
  52. <!-- per connection cache prepared statement size -->
  53. <property name="statementCacheSize">500</property>
  54. <!-- query timeout (default: 60 second, TimeUnit:second) -->
  55. <property name="queryTimeout">60</property>
  56. </runtime>
  57. </proxy>
  58. <!--
  59. Each ConnectionManager will start as thread
  60. manager responsible for the Connection IO read , Death Detection
  61. -->
  62. <connectionManagerList>
  63. <connectionManager name="clientConnectioneManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">
  64. <property name="subManagerClassName">com.meidusa.amoeba.net.ConnectionManager</property>
  65. <!-- default value is avaliable Processors
  66. <property name="processors">5</property>
  67. -->
  68. </connectionManager>
  69. <connectionManager name="defaultManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">
  70. <property name="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property>
  71. <!-- default value is avaliable Processors
  72. <property name="processors">5</property>
  73. -->
  74. </connectionManager>
  75. </connectionManagerList>
  76. <!-- default using file loader -->
  77. <dbServerLoader class="com.meidusa.amoeba.context.DBServerConfigFileLoader"> [5]
  78. <property name="configFile">${amoeba.home}/conf/dbServers.xml</property>
  79. </dbServerLoader>
  80. <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter"> [6]
  81. <property name="ruleLoader">
  82. <bean class="com.meidusa.amoeba.route.TableRuleFileLoader">
  83. <property name="ruleFile">${amoeba.home}/conf/rule.xml</property>
  84. <property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>
  85. </bean>
  86. </property>
  87. <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
  88. <property name="LRUMapSize">1500</property>
  89. <property name="defaultPool">Master</property> <!-- 这里设置默认的连接池,一般设置为写操作对应的服务器池,这里即为主库 -->
  90. <property name="writePool">Master</property>
  91. <property name="readPool">multiPool</property>
  92. <property name="needParse">true</property>
  93. </queryRouter>
  94. </amoeba:configuration>
说明
com.meidusa.amoeba.net.ServerableConnectionManager 表示这是一个Proxy Service(就目前而言)。
com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory 表示这是一个MySQL Proxy Service。

此处输入图片的描述

上面表格中出现的服务器池的名称要与dbServers.xml中定义的内容相对应。

4. 启动代理服务

通过上面的步骤我们已经配置好了一台Amoeba代理服务器。接下来就可以启动服务了。

  1. [root@Amoeba-A ~]# amoeba start
  2. log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml
  3. 2015-01-04 11:38:25,041 INFO context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-2.2.0
  4. log4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf
  5. 2015-01-04 11:38:28,237 INFO net.ServerableConnectionManager - Amoeba for Mysql listening on /172.16.1.30:3306.
  6. 2015-01-04 11:38:28,266 INFO net.ServerableConnectionManager - Amoeba Monitor Server listening on /127.0.0.1:57115.
  7. --------------------------
  8. #此命令以前台的方式启动,会输出启动时的信息。在检查没有错误信息后,中断进程,并后台运行:
  9. [root@Amoeba-A ~]# amoeba start &

我们可以使用Navicat for MySQL客户端工具进行连接测试:

此处输入图片的描述

通过上面的连接参数,我们可以很顺利的连接到Amoeba代理服务,进而对相应的数据库进行操作(例如这里是在test库中建了一个表),然后再登录任意一台数据库服务器进行查看,都可以看到操作结果。

至此,我们的Amoeba for MySQL代理服务器搭建成功。当然,这仅仅是第一步,因为该代理服务器存在单点问题,一旦宕机将彻底无法访问数据库,所以我们仍然需要借助于Keepalived配置Amoeba代理的高可用,即我们上面的的架构图所示。下面就开始高可用的配置操作。

5. Amoeba代理高可用

5.1 配置高可用

同样是使用Keepalived工具,我们要在两台阿米巴代理服务器间创建高可用(Keepalived的安装及配置过程省略)。

  1. [root@Amoeba-A ~]# ip add
  2. ...
  3. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  4. link/ether 00:0c:29:16:f7:c5 brd ff:ff:ff:ff:ff:ff
  5. inet 172.16.1.30/24 brd 172.16.1.255 scope global eth0
  6. inet 172.16.1.32/24 scope global secondary eth0
  7. ...

注意:在当前这个架构中有两套Keepalived,所以需要将两套高可用的实例名(vrrp_instance)区别开。

5.2 修改代理配置文件

首先,需要修改代理服务器上的代理配置文件:

  1. [root@Amoeba-A ~]# vim /usr/local/amoeba/conf/amoeba.xml
  2. -----------------------
  3. <!-- bind ipAddress -->
  4. <property name="ipAddress">0.0.0.0</property>
  5. <!-- 如果是两台代理高可用,那么这里的IP地址就不能够是虚拟地址。-->
  6. <!-- 如果将该配置项保持原有的注释状态,经其他同伴测试,也是可以的。-->

其次,我们将所有配置好的配置文件拷贝到新的代理服务器Amoeba-B中,确保两台Amoeba代理服务器所有的配置文件保持一致:

  1. [root@Amoeba-A ~]# scp -r /usr/local/amoeba/conf/ root@172.16.1.31:/usr/local/amoeba/

至此,两台高可用Amoeba代理服务器搭建完毕,客户端使用VIP进行连接即可。

三、配置数据库主从复制

在主从数据库的复制的部分,任然需要使用数据库自己的复制机制。Amoeba自身并不提供复制功能。

1. 双主库互为主从及高可用

1.1 配置主库高可用

此处输入图片的描述

主库高可用我们使用Keepalived,我们首先在MySQL-01上进行安装及配置。另一台主库上的安装及配置操作相同,这里不在讲述(注意配置文件的异同)。

  1. #Install Keepalived:
  2. [root@MySQL-01 tools]# yum install -y openssl* popt-devel
  3. [root@MySQL-01 tools]# wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
  4. [root@MySQL-01 tools]# tar zxvf keepalived-1.1.19.tar.gz
  5. [root@MySQL-01 tools]# cd keepalived-1.1.19
  6. [root@MySQL-01 keepalived-1.1.19]# ./configure
  7. [root@MySQL-01 keepalived-1.1.19]# make && make install
  8. ------------------------
  9. /bin/cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
  10. /bin/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
  11. mkdir /etc/keepalived -p
  12. /bin/cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
  13. /bin/cp /usr/local/sbin/keepalived /usr/sbin/
  14. /etc/init.d/keepalived start
  15. ps -ef|grep keep
  16. ------------------------
  17. root 29528 1 0 16:08 ? 00:00:00 keepalived -D
  18. root 29530 29528 0 16:08 ? 00:00:00 keepalived -D
  19. root 29532 27777 0 16:09 pts/0 00:00:00 grep keep
  1. [root@MySQL-01 ~]# vim /etc/keepalived/keepalived.conf
  2. -----------------------------------
  3. ! Configuration File for keepalived
  4. global_defs {
  5. notification_email {
  6. brucemx@126.com
  7. }
  8. notification_email_from Alexandre.Cassen@firewall.loc
  9. smtp_server 172.16.1.220
  10. smtp_connect_timeout 30
  11. router_id MySQL-01
  12. }
  13. vrrp_instance VI_1 {
  14. state MASTER
  15. interface eth0
  16. virtual_router_id 51
  17. priority 150
  18. advert_int 1
  19. nopreempt #非抢占模式,主设备如果恢复了不会抢夺虚拟地址。备机上不用设置该条目。
  20. authentication {
  21. auth_type PASS
  22. auth_pass 1111
  23. }
  24. virtual_ipaddress {
  25. 172.16.1.19/24
  26. }
  27. }

在两台主库上的安装及配置完成后,重启Keepalived服务后查看VIP:

  1. [root@MySQL-01 ~]# /etc/init.d/keepalived restart
  2. [root@MySQL-02 ~]# /etc/init.d/keepalived restart
  3. #查看虚拟地址:
  4. [root@MySQL-01 ~]# ip add
  5. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  6. link/ether 00:0c:29:60:20:f0 brd ff:ff:ff:ff:ff:ff
  7. inet 172.16.1.15/24 brd 172.16.1.255 scope global eth0
  8. inet 172.16.1.19/24 scope global secondary eth0
  9. ...

1.2 双主库互为主从

从原理论来看MySQL也支持双主的设置,即两个MySQL节点互为主备,不过虽然理论上,双主只要数据不冲突就可以工作的很好,但实际情况中还是很容发生数据冲突的,比如在同步完成之前,双方都修改同一条记录。因此在实际中,最好不要让两边同时修改。即逻辑上仍按照主从的方式工作。但双主的设置仍然是有意义的,因为这样做之后,切换主备会变的很简单。因为在出现故障后,如果之前配置了双主,则直接切换主备会很容易。

安装完Keepalived,只是保证了MySQL数据库的高可用性,但是要真正做到互为主从,还需要配置MySQL的主从复制模式,使数据库可以达到一致性状态。

第一步:要分别修改两个主库的配置文件:

  1. #MySQL-01:
  2. [root@MySQL-01 ~]# vim /etc/my.cnf
  3. [mysqld]
  4. server-id = 15
  5. log-bin=mysql-bin
  6. log-slave-updates
  7. auto_increment_offset=1
  8. #上面这行是为了让双主同时在一张表中进行添加操作时不会出现id冲突,所以在两个节点上设置为不同的值就好。
  9. auto_increment_increment=2
  10. ----------------------------------
  11. #MySQL-02:
  12. [root@MySQL-02 ~]# vim /etc/my.cnf
  13. [mysqld]
  14. server-id = 16
  15. log-bin=mysql-bin
  16. log-slave-updates
  17. auto_increment_offset=2
  18. auto_increment_increment=2

第二步:创建同步账号

  1. #两台主库上都需要创建链接用户:
  2. mysql> grant replication slave on *.* to rep@'172.16.1.%' identified by 'oldboy123';
  3. mysql> flush privileges;
  4. ----------------------------------
  5. #修改配置文件及同步账号创建完毕后需要重启服务:
  6. /etc/init.d/mysqld restart

第三步:互相设置主从同步

  1. #MySQL-01:
  2. mysql> show master status;
  3. +------------------+----------+--------------+------------------+
  4. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  5. +------------------+----------+--------------+------------------+
  6. | mysql-bin.000001 | 107 | | |
  7. +------------------+----------+--------------+------------------+
  8. #MySQL-02:
  9. CHANGE MASTER TO
  10. MASTER_HOST='172.16.1.15',
  11. MASTER_PORT=3306,
  12. MASTER_USER='rep',
  13. MASTER_PASSWORD='oldboy123',
  14. MASTER_LOG_FILE='mysql-bin.000001',
  15. MASTER_LOG_POS=107;
  16. mysql> start slave;
  17. mysql> show slave status\G
  18. Slave_IO_Running: Yes
  19. Slave_SQL_Running: Yes
  20. mysql> show master status;
  21. +------------------+----------+--------------+------------------+
  22. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  23. +------------------+----------+--------------+------------------+
  24. | mysql-bin.000001 | 107 | | |
  25. +------------------+----------+--------------+------------------+
  26. #MySQL-01:
  27. CHANGE MASTER TO
  28. MASTER_HOST='172.16.1.16',
  29. MASTER_PORT=3306,
  30. MASTER_USER='rep',
  31. MASTER_PASSWORD='oldboy123',
  32. MASTER_LOG_FILE='mysql-bin.000001',
  33. MASTER_LOG_POS=107;
  34. mysql> start slave;
  35. mysql> show slave status\G
  36. Slave_IO_Running: Yes
  37. Slave_SQL_Running: Yes

2. 设置从库的主从复制

此处输入图片的描述

  1. #MySQL-03:
  2. [root@MySQL-03 ~]# vim /etc/my.cnf
  3. [mysqld]
  4. server-id = 17
  5. ------------------
  6. #MySQL-04:
  7. [root@MySQL-04 ~]# vim /etc/my.cnf
  8. [mysqld]
  9. server-id = 18
  10. #两台从库重启服务:
  11. /etc/init.d/mysqld restart

配置主从同步:

  1. #MySQL-02:
  2. mysql> flush tables with read lock;
  3. mysql> show master status;
  4. +------------------+----------+--------------+------------------+
  5. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  6. +------------------+----------+--------------+------------------+
  7. | mysql-bin.000001 | 759 | | |
  8. +------------------+----------+--------------+------------------+
  9. #对主库进行备份:
  10. [root@MySQL-02 ~]# mysqldump -uroot -poldboy123 --event -A -B >/opt/master1.sql
  11. mysql> unlock tables;
  12. ---------------------
  13. #MySQL-03:
  14. [root@MySQL-03 ~]# mysql -uroot -poldboy123 </tmp/master1.sql
  15. CHANGE MASTER TO
  16. MASTER_HOST='172.16.1.16',
  17. MASTER_PORT=3306,
  18. MASTER_USER='rep',
  19. MASTER_PASSWORD='oldboy123',
  20. MASTER_LOG_FILE='mysql-bin.000001',
  21. MASTER_LOG_POS=759;
  22. mysql> start slave;
  23. mysql> show slave status\G
  24. Slave_IO_Running: Yes
  25. Slave_SQL_Running: Yes

在MySQL-04上执行同样的操作。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注