码迷,mamicode.com
首页 > 数据库 > 详细

Linux-MySQL5.6主从复制与读写分离

时间:2020-06-30 13:15:57      阅读:21      评论:0      收藏:0      [点我收藏+]

标签:virtual   均衡   sysconf   copy   复制   insert   mkdir   gre   重启   

主机

操作系统

IP地址

主要软件

Master

Centos7.3x86_64

192.168.1.101

Cmake,Mysql

Slave01

Centos7.3x86_64

192.168.1.102

Cmake,Mysql

Slave02

Centos7.3x86_64

192.168.1.103

Cmake,Mysql

Amoeba

Centos7.3x86_64

192.168.1.104

Amoeba

Client

Centos7.3x86_64

192.168.1.105

 

 

 

 

 

 

 

 

 

 

 

 

实验环境:

注:请提前配置好防火墙规则和本地yum源以及selinux

主从复制:

1         建立时间同步环境在master上面安装时间同步服务器

1.1         安装NTP

[[email protected] ~]# yum -y install ntp

1.2         配置NTP

[[email protected] ~]# vim /etc/ntp.conf      #添加如下两行

server 127.127.1.0

fudge 127.127.1.0stratum 8

1.3         重启服务

[[email protected] ~]# systemctl restart ntpd

2         在从节点(slave01和都slave02都要同步)上面进行时间同步  

[[email protected] ~]# yum -y install ntpdate    #此处以slave01为例

[[email protected] ~]# ntpdate 192.168.1.101

3         在Master,slave01和slave02上面编译安装Mysql

3.1         编译安装(在三个节点安装的步骤相同,此处以master为例)

    [[email protected] ~]# cd opt

[[email protected] opt]# yum install ncurses-devel -y

[[email protected] opt]# tar xf cmake-2.8.6.tar.gz

[[email protected] opt]# cd cmake-2.8.6

[[email protected] cmake-2.8.6]# ./configure && gmake && gmake install

[[email protected] cmake-2.8.6]# cd ..

[[email protected] opt]# tar xf mysql-5.6.36.tar.gz

[[email protected] opt]# cd mysql-5.6.36/

[[email protected] mysql-5.6.36]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc && make && make install

3.2         优化调整

[[email protected] mysql-5.6.36]# cp support-files/my-default.cnf /etc/my.cnf

[[email protected] mysql-5.6.36]# cp support-files/mysql.server /etc/init.d/mysqld

[[email protected] mysql-5.6.36]# chmod +x /etc/init.d/mysqld

[[email protected] mysql-5.6.36]# chkconfig --add mysqld

[[email protected] mysql-5.6.36]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile

[[email protected] mysql-5.6.36]# . /etc/profile

3.3         初始化数据库

[[email protected] mysql-5.6.36]# groupadd mysql

[[email protected] mysql-5.6.36]# useradd -M -s /sbin/nologin mysql -g mysql

[[email protected] mysql-5.6.36]# chown -R mysql: /usr/local/mysql

[[email protected] mysql-5.6.36]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

3.4         启动MySQL服务

[[email protected] scripts]# systemctl start mysqld

[[email protected] scripts]# chkconfig mysqld on

[[email protected] scripts]# mysqladmin -uroot password ‘pwd123‘ #修改root密码

Warning: Using a password on the command line interface can be insecure.

4         配置MySQL Master主服务器

4.1         修改/etc/my.cnf文件,增加以下内容

[[email protected] ~]# vim /etc/my.cnf

     server_id = 11

log-bin = master-bin

log-slave-updates = true

4.2         重启MySQL服务

[[email protected] etc]# systemctl restart mysqld

4.3         登录MySQL程序,给服务器授权

[[email protected] ~]# mysql -uroot -ppwd123

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘mysql‘@‘192.168.1.%‘ IDENTIFIED BY ‘123456‘;

mysql> FLUSH PRIVILEGES;

mysql> show master status;

+-------------------+----------+--------------+------------------+-------------------+

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-------------------+----------+--------------+------------------+-------------------+

| master-bin.000001 |      408 |              |                  |                   |

+-------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

5         配置从服务器

5.1         修改/etc/my.cnf增加以下内容:

[[email protected] ~]# vim /etc/my.cnf

server_id = 22

relay-log = relay-log-bin

relay-log-index = slave-relay-bin.index

5.2         重启服务

[[email protected] ~]# systemctl restart mysqld

5.3         登录MySQL,配置同步

[[email protected] ~]# mysql -uroot -ppwd123

mysql> change master to master_host=‘192.168.1.101‘,master_user=‘mysql‘,master_password=‘123456‘,master_log_file=‘master-bin.000001‘,master_log_pos=408;

5.4         启动同步

5.4.1    mysql> start slave;

5.5         查看Slave状态,确保以下两个值为YES

mysql> show slave status\G;

   Slave_IO_Running: Yes

   Slave_SQL_Running: Yes

6         验证主从复制

6.1         在主,从服务器上登录MySQL

[[email protected] ~]# mysql -uroot -ppwd123

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |      

| mysql              |

| performance_schema |

| test               |

+--------------------+

4 rows in set (0.00 sec)

6.2         在主服务器上面新建db_test数据库

mysql> create database db_test charset ‘utf8‘;

Query OK, 1 row affected (0.00 sec)

6.3         在主从数据库上分别查看数据库,显示数据库相同,则主从复制成功

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| db_test            |

| mysql              |

| performance_schema |

| test               |

+--------------------+

5 rows in set (0.01 sec)

 

 

读写分离:

1         在Amoeba主机安装java环境

因为Amoeba是基于jdk1.5开发的,所以官方推荐使用jdk1.5或jdk1.6,高版本不建议使用

[[email protected] ~]# mv jdk-1_5_0_21-linux-amd64.bin /usr/local/

[[email protected] ~]# cd /usr/local/

[[email protected] local]# chmod +x /usr/local/jdk-1_5_0_21-linux-amd64.bin

[[email protected] local]# ./jdk-1_5_0_21-linux-amd64.bin       #根据提示按enter输入即可

[[email protected] local]# mv jdk1.5.0_21/ jdk1.5

[[email protected] ~]#vim /etc/profile          # 添加以下配置:

export JAVA_HOME=/usr/local/jdk1.5

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

export AMOEBA_HOME=/usr/local/amoeba/

export PATH=$PATH:$AMOEBA_HOME/bin

[[email protected] ~]# source /etc/profile

[[email protected] ~]# java -version

java version "1.5.0_21"

Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_21-b01)

Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_21-b01, mixed mode)

2         安装并配置Amoeba软件

张三

[[email protected] ~]# mkdir /usr/local/amoeba

[[email protected] ~]# tar xf /opt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

[[email protected] ~]# chmod -R 755 /usr/local/amoeba/

[[email protected] ~]# /usr/local/amoeba/bin/amoeba

amoeba start|stop            ##显示此内容说明Amoeba安装成功

3         配置Amoeba读写分离,两个slave读负载均衡

3.1         Master,slave01,slave02开放权限给amoeba访问

grant all on *.* to ‘test‘@‘192.168.1.%‘ identified by ‘123.com‘;

flush privileges;

3.2         编辑amoeba.xml配置文件

修改内容为下列标记位置:

                        <property name="authenticator">

                                <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">

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

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

 

                                        <property name="filter">

                                                <bean class="com.meidusa.amoeba.server.IPAccessController">

                                                        <property name="ipFile">${amoeba.home}/conf/access_list.conf</property>

                                                </bean>

                                        </property>

                                </bean>

                        </property>

修改内容为以下加粗部分,注意删除注释!!!

        <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">

                <property name="ruleLoader">

                        <bean class="com.meidusa.amoeba.route.TableRuleFileLoader">

                                <property name="ruleFile">${amoeba.home}/conf/rule.xml</property>

                                <property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>

                        </bean>

                </property>

                <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>

                <property name="LRUMapSize">1500</property>

                <property name="defaultPool">master</property>

               

                <property name="writePool">master</property>

                <property name="readPool">slaves</property>

 

                <property name="needParse">true</property>

        </queryRouter>

3.3         编辑dbServer.xml配置

[[email protected] amoeba]# vim conf/dbServers.xml

修改内容为以下加粗部分:

                        <!-- mysql user -->

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

 

                        <!--  mysql password-->

                        <property name="password">123.com</property>

                </factoryConfig>

 

 

以下修改后的内容为加粗的部分:

        <dbServer name="master"  parent="abstractServer">

                <factoryConfig>

                        <!-- mysql ip -->

                        <property name="ipAddress">192.168.1.101</property>

                </factoryConfig>

        </dbServer>

 

        <dbServer name="slave01"  parent="abstractServer">

                <factoryConfig>

                        <!-- mysql ip -->

                        <property name="ipAddress">192.168.1.102</property>

                </factoryConfig>

        </dbServer>

 

        <dbServer name="slave02"  parent="abstractServer">

                <factoryConfig>

                        <!-- mysql ip -->

                        <property name="ipAddress">192.168.1.103</property>

                </factoryConfig>

        </dbServer>

 

        <dbServer name="slaves" virtual="true">

                <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

                        <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->

                        <property name="loadbalance">1</property>

 

                        <!-- Separated by commas,such as: server1,server2,server1 -->

                        <property name="poolNames">slave01,slave02</property>

                </poolConfig>

        </dbServer>

3.4         确认配置无误后,可以启动amoeba软件,其默认的端口是tcp8066

[[email protected] amoeba]# ./bin/amoeba start&

[[email protected] amoeba]# netstat -anptl |grep 8066

tcp6     0  0     :::8066     :::*         LISTEN      2663/java

4         测试

4.1         在client主机上面安装mysql命令进行测试

[[email protected] ~]# yum -y install mysql

可以通过代理访问MySQL:

[[email protected] ~]# mysql -uamoeba -p123456 -h 192.168.1.104 -P8066

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MySQL connection id is 96263158

Server version: 5.1.45-mysql-amoeba-proxy-2.2.0 Source distribution

 

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

 

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

 

MySQL [(none)]>

4.2         在Master上面创建一个表,然后同步到各从服务器上,然后关闭各种从服务器的slave功能,再插入区别语句

mysql> use db_test;

Database changed

mysql> create table animal(id int(10) primary key,name varchar(20) not null,number int(10) not null);

Query OK, 0 rows affected (0.01 sec)

分别在两台从服务器上面关闭slave功能:

mysql> stop slave;

Query OK, 0 rows affected (0.00 sec)

然后在master服务器上面插入区别语句:

mysql> insert into animal values (1,‘elephant‘,500);

Query OK, 1 row affected (0.00 sec)

4.3         从服务器(slave)上面同步了表,手动插入其他内容

Slave01:

mysql> use db_test;

mysql> insert into animal values (‘2‘,‘tiger‘,102);

Query OK, 1 row affected (0.00 sec)

Slave02:

mysql> use db_test;

mysql> insert into animal values (3,‘dolphin‘,103);

Query OK, 1 row affected (0.00 sec)

4.4         测试读操作

在client主机上第一次查询结果如下:

MySQL [(none)]> select * from db_test.animal;

+----+---------+--------+

| id | name    | number |

+----+---------+--------+

|  3 | dolphin |    103 |

+----+---------+--------+

1 row in set (0.00 sec)

第二次查询结果如下:

MySQL [(none)]> select * from db_test.animal;

+----+-------+--------+

| id | name  | number |

+----+-------+--------+

|  2 | tiger |    102 |

+----+-------+--------+

1 row in set (0.01 sec)

第三次查询结果如下:

MySQL [(none)]> select * from db_test.animal;

+----+---------+--------+

| id | name    | number |

+----+---------+--------+

|  3 | dolphin |    103 |

+----+---------+--------+

1 row in set (0.00 sec)

4.5         测试写操作

在client主机上插入一条语句:

MySQL [(none)]> insert into db_test.animal values (4,‘seagull‘,‘105‘);

Query OK, 1 row affected (0.00 sec)

但在client上查询不到,最终只有在Master上才能查看到这条语句内容,说明写操作在Master服务器上

mysql> select * from db_test.animal;

+----+----------+--------+

| id | name     | number |

+----+----------+--------+

|  1 | elephant |    500 |

|  4 | seagull  |    105 |

+----+----------+--------+

2 rows in set (0.00 sec)

由此验证,已经实现了MySQL的读写分离,目前所有的写操作全部都在Master主服务器上,用来避免数据的不同步,所有的读操作都分摊给了Slave从服务器,用来分摊数据库的压力

Linux-MySQL5.6主从复制与读写分离

标签:virtual   均衡   sysconf   copy   复制   insert   mkdir   gre   重启   

原文地址:https://www.cnblogs.com/Vampire-MIn/p/13212958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!