设为首页 收藏本站
查看: 501|回复: 0

[经验分享] MySQL主从复制与读写分离

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-12-9 08:44:35 | 显示全部楼层 |阅读模式
一、准备工作
1、拓扑
QQ截图20161209084431.png
2、环境简介
主机
系统
IP
主要软件
Client
Windows 10
192.168.10.1
Mysql
Amoeba
Centos6.5 64位
192.168.10.129
amoeba-mysql-binary-2.2.0.tar.gz
jdk-6u14-linux-x64.bin
Master
Centos6.5 64位
192.168.10.130
Ntp
cmake-2.8.6.tar.gz
mysql-5.5.22.tar.gz
Slave1
Centos6.5 64位
192.168.10.131
Ntp
cmake-2.8.6.tar.gz
mysql-5.5.22.tar.gz
Slave2
Centos6.5 64位
192.168.10.134
Ntp
cmake-2.8.6.tar.gz
mysql-5.5.22.tar.gz
二、实施过程1、搭建MySQL主从复制-时间同步,主节点搭建时间同步服务器--安装ntp
1
[iyunv@master src]# yum -y install ntp



--配置ntp,添加
1
2
3
[iyunv@master src]# vim /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 8



--重启服务
1
[iyunv@master src]# service ntpd restart



--从节点时间同步
1
2
3
[iyunv@slave1 ~]# yum -y install ntpdate
[iyunv@slave1 ~]# ntpdate 192.168.10.130
8Dec 14:16:14 ntpdate[28137]: step time server 192.168.10.130 offset 1.107709sec



-编译安装MySQL
1
[iyunv@master src]# yum -y installncurses-devel



--安装cmake
1
2
3
[iyunv@master src]# tar zxfcmake-2.8.6.tar.gz
[iyunv@master src]# cd cmake-2.8.6
[iyunv@master cmake-2.8.6]# ./configure&& gmake && gmake install



--安装MySQL
1
2
3
[iyunv@master src]# tar zxfmysql-5.5.22.tar.gz
[iyunv@master src]# cd mysql-5.5.22
[iyunv@master mysql-5.5.22]# cmake-DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all&& make && make install



--优化调整
1
2
3
4
5
6
[iyunv@master mysql-5.5.22]# cpsupport-files/my-medium.cnf /etc/my.cnf
[iyunv@master mysql-5.5.22]# cpsupport-files/mysql.server /etc/init.d/mysqld
[iyunv@master mysql-5.5.22]# chmod +x /etc/init.d/mysqld
[iyunv@master mysql-5.5.22]# chkconfig --addmysqld
[iyunv@master mysql-5.5.22]# echo"PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
[iyunv@master mysql-5.5.22]# source/etc/profile



--初始化数据库
1
2
3
[iyunv@master mysql-5.5.22]# useradd -M -s/sbin/nologin mysql
[iyunv@master mysql-5.5.22]# chown -Rmysql:mysql /usr/local/mysql
[iyunv@master mysql-5.5.22]#/usr/local/mysql/scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/



--启动服务
1
2
3
4
[iyunv@master ~]# service mysqld start
Starting MySQL..                                           [确定]
[iyunv@master ~]# chkconfig mysqld on
[iyunv@master ~]# mysqladmin -u rootpassword '123456'



-配置master主服务器--修改配置文件
1
2
3
4
[iyunv@master ~]# vim /etc/my.cnf
log-bin=master-bin     #修改
log-slave-updates=true #修改
server-id       = 11   #增加



--重启服务
1
2
3
[iyunv@master ~]# service mysqld restart
Shutting down MySQL.                                       [确定]
Starting MySQL..                                           [确定]



--给从服务器授权
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[iyunv@master ~]# mysql -uroot -p123456
mysql> grant replication slave on *.* to'slave'@'192.168.10.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
  
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
  
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB |Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |      336 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)



-配置从服务器--修改配置文件
1
2
3
4
[iyunv@slave1 ~]# vim /etc/my.cnf
server-id       = 22   #修改
relay-log=relay-log-bin      #增加
relay-log-index=slave-relay-bin.index #增加



--重启服务
1
[iyunv@slave1 data]# service mysqld restart



--登陆MySQL,配置同步
---根据主服务器的file和position,配置master_log_file和master_log_pos参数
1
2
3
[iyunv@slave1 data]# mysql -uroot –p
mysql> change master tomaster_host='192.168.10.130',master_user='slave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=336;
Query OK, 0 rows affected (0.07 sec)



--启动同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;
*************************** 1. row***************************
               Slave_IO_State: Waiting formaster to send event
                  Master_Host: 192.168.10.130
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File:master-bin.000001
         Read_Master_Log_Pos: 336
               Relay_Log_File:relay-log-bin.000002
                Relay_Log_Pos: 254
       Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes #确保两个yes
-测试主从复制--在主服务器上新建数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[iyunv@master ~]# mysql -uroot -p123456
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.01 sec)
  
mysql> create database db_test;
Query OK, 1 row affected (0.00 sec)
  
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_test            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)



--从服务器如果同步显示,则表示成功
1
2
3
4
5
6
7
8
9
10
11
12
[iyunv@slave2 ~]# mysql -uroot -p123456
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_test            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.12 sec)




2、搭建MySQL读写分离-在主机amoeba上安装Java环境
1
2
3
[iyunv@amoeba src]# chmod +xjdk-6u14-linux-x64.bin
[iyunv@amoeba src]# ./jdk-6u14-linux-x64.bin
[iyunv@amoeba src]# mv jdk1.6.0_14//usr/local/jdk1.6



--添加环境变量
1
2
3
4
5
6
7
8
9
10
11
[iyunv@amoeba src]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
exportCLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
exportPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba/
export PATH=$PATH:$AMOEBA_HOME/bin
[iyunv@amoeba src]# source /etc/profile
[iyunv@amoeba src]# java -version
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build1.6.0_14-b08)
Java HotSpot(TM) 64-Bit Server VM (build14.0-b16, mixed mode)



-安装amoeba
1
2
3
4
5
[iyunv@amoeba src]# mkdir /usr/local/amoeba
[iyunv@amoeba src]# tar zxfamoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
[iyunv@amoeba src]# chmod -R 755 /usr/local/amoeba/
[iyunv@amoeba src]#/usr/local/amoeba/bin/amoeba
amoeba start|stop  #显示此说明成功



-配置amoeba读写分离--节点服务器开放权限
1
2
3
4
mysql> grant all on *.* totest@'192.168.10.%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)



--修改配置文件-amoeba.xml
[iyunv@amoeba ~]# vim/usr/local/amoeba/conf/amoeba.xml
……
<propertyname="authenticator">
                                <beanclass="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">

<property name="user">amoeba</property>

<propertyname="password">123456</property>

<property name="filter">
                                            <beanclass="com.meidusa.amoeba.server.IPAccessController">
                           <propertyname="ipFile">${amoeba.home}/conf/access_list.conf</property>
</bean>
</property>
</bean>
</property>
……
<queryRouterclass="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
                <propertyname="ruleLoader">
                        <beanclass="com.meidusa.amoeba.route.TableRuleFileLoader">
<propertyname="ruleFile">${amoeba.home}/conf/rule.xml</property>
                                <propertyname="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>
</bean>
</property>
                <propertyname="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
                <propertyname="LRUMapSize">1500</property>
                <propertyname="defaultPool">master</property>

                <property name="writePool">master</property>
                <propertyname="readPool">slaves</property>
                <propertyname="needParse">true</property>
       </queryRouter>
--修改配置文件-dbServers.xml
[iyunv@amoeba ~]# vim/usr/local/amoeba/conf/dbServers.xml
     <!-- mysql user-->
<propertyname="user">test</property>

  <propertyname="password">123456</property>


<dbServer name="master"  parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
                        <propertyname="ipAddress">192.168.10.130</property>
</factoryConfig>
</dbServer>

<dbServer name="slave1"  parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
                        <propertyname="ipAddress">192.168.10.131</property>
</factoryConfig>
</dbServer>
<dbServer name="slave2"  parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
                        <propertyname="ipAddress">192.168.10.134</property>
</factoryConfig>
</dbServer>

<dbServer name="slaves"virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- Load balancingstrategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->

<!-- Separated by commas,suchas: server1,server2,server1 -->
                        <propertyname="poolNames">slave1,slave2</property>
</dbServer>

--启动amoeba,8066/tcp
1
2
3
4
[iyunv@amoeba ~]#/usr/local/amoeba/bin/amoeba start &
[iyunv@amoeba ~]# netstat -antp | grep java
tcp       0      0::ffff:127.0.0.1:8819       :::*                        LISTEN      55982/java         
tcp       0      0 :::8066                     :::*                        LISTEN      55982/java






3、测试-在client上测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
C:\Users\Administrator>mysql -u amoeba-p123456 -h192.168.10.129 -P8066
  
  
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_test            |
| mysql             |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.11 sec)




-在master上建表
1
2
3
4
mysql> use db_test;
Database changed
mysql> create table test (idint(10),name char(20));
Query OK, 0 rows affected (0.01 sec)



--从服务器停止同步
1
2
3
4
5
6
7
8
9
10
11
12
mysql> use db_test;
Database changed
mysql> show tables;
+-------------------+
| Tables_in_db_test |
+-------------------+
| test              |
+-------------------+
1 row in set (0.02 sec)
  
mysql> stop slave;
Query OK, 0 rows affected (0.02 sec)



--主服务器上插入数据
1
2
mysql> insert into testvalues('1','master');
Query OK, 1 row affected (0.00 sec)



-在从服务器上插入数据
--slave1
1
2
mysql> insert into test values('2','slave1');
Query OK, 1 row affected (0.01 sec)




--slave2
1
2
mysql> insert into test values('3','slave2');
Query OK, 1 row affected (0.03 sec)



-测试读
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
C:\Users\Administrator>mysql -u amoeba-p123456 -h192.168.10.129 -P8066
mysql> use db_test;
mysql> select * from test;
+------+--------+
| id  | name   |
+------+--------+
|   2 | slave1 |
+------+--------+
1 row in set (0.00 sec)
  
mysql> select * from test;
+------+--------+
| id  | name   |
+------+--------+
|   3 | slave2 |
+------+--------+
1 row in set (0.00 sec)
  
mysql> select * from test;
+------+--------+
| id  | name   |
+------+--------+
|   2 | slave1 |
+------+--------+
1 row in set (0.00 sec)



-测试写
--client
1
2
3
4
C:\Users\Administrator>mysql -u amoeba-p123456 -h192.168.10.129 -P8066
  
mysql> insert into test values('4','client');
Query OK, 1 row affected (0.10 sec)




--master
1
2
3
4
5
6
7
8
9
[iyunv@master ~]# mysql -uroot -p123456
mysql> select * from db_test.test;
+------+--------+
| id  | name   |
+------+--------+
|   1 | master |
|   4 | client |
+------+--------+
2 rows in set (0.00 sec)



--slave1
1
2
3
4
5
6
7
8
[iyunv@slave1 data]# mysql –uroot –p123456
mysql> select * from db_test.test;
+------+--------+
| id  | name   |
+------+--------+
|   2 | slave1 |
+------+--------+
1 row in set (0.00 sec)



--slave2
1
2
3
4
5
6
7
8
[iyunv@slave2 ~]# mysql -uroot -p123456
mysql> select * from db_test.test;
+------+--------+
| id  | name   |
+------+--------+
|   3 | slave2 |
+------+--------+
1 row in set (0.00 sec)






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-311683-1-1.html 上篇帖子: CentOS7安装mysql 下篇帖子: linux 下安装 源码安装mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表