mysql 主从同步-读写分离
主从同步与读写分离测试
一、 实验环境(主从同步)
Master centos 7.3 192.168.138.13
Slave centos 7.3 192.168.138.14
二、在master操作
- 安装并配置文件
[root@localhost ~]# yum install mariadb-server -y
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=1 //必须唯一
log-bin=mysql-bin //开启binlog日志
character-set-server=utf8 //设置字符集
2.启动mysql
[root@localhost ~]# systemctl start mariadb
3. 授权root用户
MariaDB [(none)]> grant all on *.* to root@'localhost' identified by '123456';
MariaDB [(none)]> grant all on *.* to root@'%' identified by '123456';
4. 刷新权限表
MariaDB [(none)]> flush privileges
5.查看master状态
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 521 | | |
+------------------+----------+--------------+------------------+
注意:如果主库中已存在数据,则需要备份拷到从库保持数据一致性
1.锁定数据表,避免在备份过程中,表被更新
mysql>LOCK TABLES tbl_name READ;
为表增加一个写锁定:
mysql>LOCK TABLES tbl_name WRITE;
解锁 : mysql>UNLOCK TABLES;
2.备份数据
方法一
Mysqldump -uroot -p –B db1 –T tb1 | gzip > /mysqlbackup/tb1.sql.gz
方法二
直接备份datadir=/var/lib/mysql
三、 在slave上操作
- 安装并配置/etc/my,cnf
[root@localhost ~]# yum install mariadb-server -y
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=1 //必须唯一
character-set-server=utf8 //设置字符集
2. 启动mysql
[root@localhost ~]# systemctl start mariadb
3. 配置同步参数
MariaDB [(none)]> change master to
master_host='192.168.138.13',
master_user='root',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000003',
master_log_pos=521;
4. 启动主从同步进程
MariaDB [(none)]> start slave;
5. 检查状态
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.138.13
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 521
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 529
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
看到两个yes说明配置成功
四、 测试
1.在slave上查看
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
2. 在master创建数据库
MariaDB [(none)]> create database testdb1;
Query OK, 1 row affected (0.00 sec)
3. 在slave查看
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| testdb1 |
+--------------------+
4 rows in set (0.00 sec)
--------------------------------------------------------------------------------------------------------------------------------------------
读写分离
一、环境准备(在主从同步基础上)
Master centos7.3 192.168.138.13
Slave centos7.3 192.168.138.14
Mycat centos7.3 192.168.138.15
管理端 centos7.3 192.168.138.16
二、安装并配置mycat
1.部署jdk环境
MyCAT用Java开发,需要有JAVA运行环境,mycat依赖jdk1.7的环境
1)上传jdk
[root@localhost tools]# ll jdk-7u45-linux-x64.tar.gz
2)安装jdk
[root@localhost tools]# mkdir /usr/java
[root@localhost tools]# tar xf jdk-7u45-linux-x64.tar.gz -C /usr/java/
3)设置环境变量
[root@localhost tools]# vim /etc/profile.d/java.sh
内容如下:
export JAVA_HOME=/usr/java/jdk1.7.0_45/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
使环境变量当前终端生效
[root@localhost tools]# source /etc/profile.d/java.sh
4)测试
[root@localhost tools]# java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
2.安装mycat
1)下载mycat源码包
[root@localhost ~]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6
2)解压
[root@localhost ~]# tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local
解压内容
[root@localhost ~]# ll /usr/local/mycat/
total 12
drwxr-xr-x 2 root root 190 Dec
3 16:17 bin
drwxrwxrwx 2 root root 6 Mar
1 2016 catlet
drwxrwxrwx 4 root root 4096 Dec 3 16:17 conf
drwxr-xr-x 2 root root 4096 Dec 3 16:17 lib
drwxrwxrwx 2 root root 6 Oct 28
2016 logs
-rwxrwxrwx 1 root root 217 Oct 28
2016 version.txt
3)添加环境变量
[root@localhost local]# cat /etc/profile.d/mycat.sh
export
PATH=$PATH:/usr/local/mycat/bin
[root@localhost
tools]# source /etc/profile.d/mycat.sh
3.读写分离配置
[root@localhost local]# cd
/usr/local/mycat/
[root@localhost mycat]# ls
bin
catlet conf lib
logs version.txt
[root@localhost conf]# cp
schema.xml{,.bak}
[root@localhost conf]# vim schema.xml
主要修改:
1)balance="1" writeType="0"
switchType="1"
balance
1、balance=0 不开启读写分离机制,所有读操作都发送到当前可用的writehostle
.
2、balance=1 全部的readhost与stand by writeHost 参与select语句的负载均衡。简单的说,双主双从模式(M1->S1,M2->S2,并且M1和M2互为主备),正常情况下,M1,S1,S2都参与select语句的复杂均衡。
3、balance=2 所有读操作都随机的在readhost和writehost上分
writeType
负载均衡类型,目前的取值有3种:
1、writeType="0", 所有写操作发送到配置的第一个writeHost。
2、writeType="1",所有写操作都随机的发送到配置的writeHost。
3、writeType="2",不执行写操作。
switchType
1、switchType=-1 表示不自动切换
2、switchType=1 默认值,自动切换
3、switchType=2 基于MySQL 主从同步的状态决定是否切换
2)在<schema 最后加上dataNode="dn1"
修改<writeHost
修改<readHost
注:根据自己实际情况,其他无用的就可删除
配置好的文件如下:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/"
>
<schema name="TESTDB" checkSQLschema="false"
sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1"
database="db1" />
<dataHost name="localhost1" maxCon="1000"
minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native"
switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.138.13:3306"
user="root"
password="123456">
<readHost host="hostR1" url="192.168.138.14:3306"
user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
4、创建管理用户
1)主库上对mycat用户授权如下:
用户:mycat 密码:123456 端口:3306
权限:insert,delete,update,select
命令:grant insert,delete,update,select on TD_OA.* to
mycat@'192.168.138.%' identified by '123456';
flush privileges;
2)从库上mycat用户授权如下:
用户:mycat 密码:123456 端口:3306/3307
权限: select
grant select on TD_OA.* to mycat@'192.168.138.%' identified by '123456';
flush privileges;
测试环境可以直接使用root用户,授予所有权限:
mysql> grant all on *.* to root@'192.168.95.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on *.* to root@'localhost' identified by '123456';
- 修改mycat配置文件
默认配置即可
①这里配置的是可以连接主库的两个用户
用户:root 密码:123456 给予此用户TESTDB数据库增删改查的权限。
用户:user 密码:user 给予此用户TESTDB数据库读的权限。
②这里的TESTDB,不一定是你数据库上的真实库名,可以任意指定,只要接下来和schema.xml的配置文件的库名统一即可。
1. 在客户端连接mysql主库服务器:
1)先安装mysql
2)# mysql -uroot –p123456
-h192.168.138.15 -P8066 -DTESTDB
8.主从同步读写分离测试
1)管理端创建表
[root@localhost ~]# mysql -uroot –p123456 -h192.168.138.16
-P8066 -DTESTDB
CREATE TABLE test1 (id int(10),name varchar(10),address varchar(20) DEFAULT
NULL);
手动停止主从同步:(stop slave)
注意:工作中不能这么干
2)读功能测试:
分别在主从库插入数据:
master: insert into test1 values(1,'test1','master');
slave1: insert into test1 values(2,'test1','slave1');
3)管理端验证
负载均衡:
mysql> select * from test1;
+------+-------+---------+
| id | name | address |
+------+-------+---------+
| 2 | test1 | slave1 |
+------+-------+---------+
1 row in set (0.00 sec)
4)写功能:
管理端再次插入数据
mysql> insert into test1 values(3,'test1','write');
Query OK, 1 row affected (0.00 sec)
在master查看
MariaDB [db1]> select * from test1;
+------+------+---------+
| id
| name | address |
+------+------+---------+
|
1 | test | master |
|
3 | test | write |
+------+------+---------+
2 rows in set (0.00 sec)
在Slave查看
MariaDB [db1]> select * from test1;
+------+------+---------+
| id
| name | address |
+------+------+---------+
|
2 | test | slave |
+------+------+---------+
3 rows in set (0.00 sec)
#注意:测试完毕启动主从同步功能。
mysql 主从同步-读写分离的更多相关文章
- 使用docker 实现MySQL主从同步/读写分离
1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...
- 聊聊Mysql主从同步读写分离配置实现
Hi,各位热爱技术的小伙伴您们好,好久没有写点东西了,今天写点关于mysql主从同步配置的操作日志同大家一起分享.最近自己在全新搭建一个mysql主从同步读写分离数据库简单集群,我讲实际操作步骤整理分 ...
- mysql主从同步--读写分离。
1.mysql 安装参考 https://www.cnblogs.com/ttzzyy/p/9063737.html 2. 主mysql,从mysql 指定配置文件启动 mysqld --defaul ...
- 关系型数据库MySQL主从同步-读写分离
1.环境准备 我的数据库版本是MySQL 5.6 MySQL主机至少两个实例,可以是多实例,可以是多台主机 关闭selinux,关闭防火墙等基础优化 2.安装 yum -y install make ...
- mysql数据库主从同步读写分离(一)主从同步
1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做? 不往从服务器去写了 ...
- Docker容器启动Mysql,Docker实现Mysql主从,读写分离
Docker容器启动Mysql,Docker实现Mysql主从,读写分离 一.Docker文件编排 二.配置主从复制 2.1 配置master 2.2 配置slave 三.验证主从复制 3.1 mas ...
- Mysql主从配置+读写分离
Mysql主从配置+读写分离 MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. ...
- Mysql主从配置+读写分离(转)
MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 注:安装前须查看是否已经安装了 ...
- docker-compose.yml样例(mysql主从+mycat读写分离)
Docker-compose.yml文件示例 1.mysql主从复制的docker-compose.yml文件 # cat docker-compose.yml version: '2' # 这个ve ...
随机推荐
- librtmp将本地FLV文件发布到RTMP流媒体服务器
没有用到ffmpeg库 可以将本地FLV文件发布到RTMP流媒体服务器 使用librtmp发布RTMP流可以使用两种API:RTMP_SendPacket()和RTMP_Write(). 使用RTMP ...
- Unity3D 新版粒子系统 (Shuriken)
Shuriken粒子系统是继Unity3.5版本之后推出的新版粒子系统,它采用了模块化管理,个性化的粒子模块配合粒子曲线编辑器使用户更容易创作出各种兵分复杂的粒子效果. 创建一个粒子系统的方式有两种: ...
- Qt计算两个时间差
QTime startTime = QTime::currentTime(); QThread::msleep(SLEEP_TIME_MILL); QTime stopTime = QTime::cu ...
- tableview直接滚动至最后一行
类似聊天界面,tableview应该直接显示在最后一行,并且不应该有滚动的出现. 在网上查了很久,直接滚动至最后一行很容易实现,有两种方法比较好. 1. 调用scrollToRowAtIndexPat ...
- 开发VS2008 AddIn 入门Sample
本文主要介绍的是VS2008插件开发 环境要求:VS2008:.Net3.5 目标:开发插件功能为“在VS中创建文本文档,并在文本开头输入//This code was created For Tes ...
- webpack配置(二)
在配置webpack json loader的时候报错,如下: 解决方案: 首先,json文件中不能有注释 其次: 这里webpack.consig.js里面,modul下的loaders的loade ...
- 应急分析异常通信的小思路和自己写的小工具(查询CNAME和A记录)
一.背景: 在很多时候,应急会发现.卧槽,异常连接,只有一个域名或者IP. 怎么办?上防火墙看记录,查域名对应的记录累成狗,自己把之前的代码改了改,写了个小工具,一条命令查询DNS相关记录,也可以指定 ...
- 【BZOJ2424】[HAOI2010]订货 最小费用流
[BZOJ2424][HAOI2010]订货 Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定 ...
- PAT 甲级 1026 Table Tennis(模拟)
1026. Table Tennis (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A table ...
- SQL Server中执行Sql字符串,返回执行结果
今天遇到一个问题:想把sql字符串在SQL Server 中执行了,并获取执行的结果 ); SET @tablename='select @table3 = count(1) from UserVis ...