配置MySQL主从复制和读写分离
实验环境
| 序号 | 主机名 | IP地址 | 备注 |
|---|---|---|---|
| 1 | mysql-master | 192.168.204.201 | MySQL主库 |
| 2 | mysql-slave | 192.168.204.202 | MySQL从库 |
| 3 | appserver | 192.168.204.111 | 应用服务器 |

安装配置MySQL数据库
1.使用yum安装mysql和mysql-server
yum install -y mariadb mariadb-server
2.启动mysql服务
systemctl start mariadb
systemctl enable mariadb
3.查看启动状态
systemctl status mariadb
netstat -anpt | grep "mysql" --color

4.允许3306端口通过防火墙
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

5.设置MySQL密码
mysql_secure_installation
6.在mysql-master上创建数据库
使用root用户登录MySQL
mysql -uroot -p123456
创建数据库并添加数据
create database db_test;
show databases;
use db_test;
create table if not exists user_info(
username varchar(16) not null,
password varchar(32) not null,
realname varchar(16) default '',
primary key (username)
)default charset=utf8;
show tables;
insert into user_info(username, password, realname) values
('10001', '123456', '小明'),
('10002', '123456', '小红'),
('10003', '123456', '小王'),
('10004', '123456', '小张'),
('10005', '123456', '小李');
select * from user_info where 1;

在mysql-master上授权数据库访问权限
GRANT all ON db_test.* TO 'admin'@'%' identified BY '123456';
flush privileges;
在mysql-slave、appserver上登录mysql-master数据库
mysql -h 192.168.204.201 -uroot -p123456

在mysql-master上撤销数据库访问权限
REVOKE all ON db_test.* FROM 'admin'@'%';
flush privileges;
配置master和slave两台mysql服务器的主从复制
1.在master数据库上启用binlog日志,建立从库账号rep
查看binlog日志状态
show variables like 'log_bin';

更改my.cnf配置文件
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

重启MySQL,查看binlog日志
systemctl restart mariadb
mysql -uroot -p123456 -e "show variables like 'log_bin';"
mysql -uroot -p123456 -e "show master status;"

记住此处File和Position的值
建立从库账号
grant replication slave on *.* to rep@'192.168.204.202' identified by '123456';
show grants for rep@'192.168.204.%';

2.在master数据库上备份现有数据库
对master数据库锁表
flush tables with read lock;
备份master数据库
mysqldump -uroot -p123456 --all-databases | gzip > /root/database_`date '+%Y-%m-%d'`.sql.gz
将备份文件拷贝至slave
scp database_*.sql.gz root@192.168.204.202:/root
3. 配置slave数据库,在slave上恢复数据库
配置slave数据库server-id,关闭binlog日志
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
# vim /etc/my.cnf
#log-bin=mysql-bin
#binlog_format=mixed
server-id = 2

4.重启slave的mysql
重启mysql服务
systemctl restart mariadb
查看log_bin和server_id的值
show variables like 'log_bin';
show variables like 'server_id';

5.将数据恢复至slave
gzip -d /root/database_*.sql.gz
mysql -uroot -p123456 < /root/database_*.sql
mysql -uroot -p123456 -e "show databases;"

6.在slave数据库上配置复制参数
在slave上配置复制参数
将MASTER_LOG_FILE和MASTER_LOG_POS的值替换成上述master上查询的值
change master to
MASTER_HOST='192.168.204.201',
MASTER_USER='rep',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=245;

在slave上配置启用复制
start slave;

在slave上查看复制状态
show slave status \G;

两个均为Yes即可
重启master和slave的mysql服务
systemctl restart mariadb
在master上为数据库db_test增加记录,在slave查看同步情况
-- mysql-master
insert into db_test.user_info (username, password, realname) values ('20001', '123456', 'Tom');
select * from db_test.user_info where 1;

-- mysql-slave
select * from db_test.user_info where 1;

已经实现了主从复制
在appserver上配置mysql读写分离
1.在appserver上安装mysql-proxy
从https://downloads.mysql.com/archives/proxy/下载mysql-proxy
cd ~
wget https://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-sles11-x86-64bit.tar.gz
tar -xzvf mysql-proxy-0.8.5-linux-sles11-x86-64bit.tar.gz
cp -r mysql-proxy-0.8.5-linux-sles11-x86-64bit /usr/local/mysql-proxy
2.在appserver上配置mysql-proxy
创建主配置文件
cd /usr/local/mysql-proxy
mkdir lua #创建脚本存放目录
mkdir logs #创建日志目录
cp share/doc/mysql-proxy/rw-splitting.lua ./lua/ #复制读写分离配置文件
cp share/doc/mysql-proxy/admin-sql.lua ./lua/ #复制管理脚本
vim /etc/mysql-proxy.cnf #创建配置文件
主配置文件内容
使用前,请去掉注释
#vim /etc/mysql-proxy.cnf
[mysql-proxy]
user=root #运行mysql-proxy用户
admin-username=myproxy #主从mysql共有的用户
admin-password=123456 #用户的密码
proxy-address=127.0.0.1:3306 #mysql-proxy运行ip和端口,不加端口默认4040
proxy-read-only-backend-addresses=192.168.204.202 #指定后端从slave读取数据
proxy-backend-addresses=192.168.204.201 #指定后端master写入数据
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定读写分离配置文件位置
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql/lua #指定管理脚本
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log #日志位置
log-level=info #定义log日志级别,由高到低分别(error|warning|info|message|debug)
修改权限
chmod 660 /etc/mysql-proxy.cnf
3.在appserver上修改读写分离配置文件
vim /usr/local/mysql-proxy/lua/rw-splitting.lua
修改以下内容
--- config
--
-- connection pool
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, -- 默认超过4个连接数时才开始读写分离
max_idle_connections = 1, -- 默认为8
is_debug = false
}
end

4.在appserver上启动mysql-proxy
启动
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf --daemon
查看进程
netstat -anpt | grep 3306

5.在mysql-master和mysql-slave上分别给myproxy授权
在mysql-master和mysql-slave上授权给mysql-proxy
grant all on *.* to 'myproxy'@'192.168.204.%' identified by '123456';
flush privileges;
6.在appserver上连接mysql-proxy,测试读写分离
在appserver上通过mysql-proxy操作数据库
mysql -h 127.0.0.1 -umyproxy -p123456 -e "select * from db_test.user_info where 1;"
mysql -h 127.0.0.1 -umyproxy -p123456 -e "insert into db_test.user_info (username, password, realname) values ('30001', '123456', 'Jack');"
mysql -h 127.0.0.1 -umyproxy -p123456 -e "select * from db_test.user_info where 1;"

在mysql-master上查询
mysql -uroot -p123456 -e "select * from db_test.user_info where 1;"

在mysql-master上查询
mysql -uroot -p123456 -e "select * from db_test.user_info where 1;"

经验证,已实现读写分离
本文链接: https://www.cnblogs.com/connect/p/mysql-master-slave-copy-and-read-write-separation.html
配置MySQL主从复制和读写分离的更多相关文章
- Mysql主从复制,读写分离(mysql-proxy),双主结构完整构建过程
下面介绍MySQL主从复制,读写分离,双主结构完整构建过程,不涉及过多理论,只有实验和配置的过程. Mysql主从复制(转载请注明出处,博文地址:) 原理是master将改变记录到二进制日志(bina ...
- Mysql主从复制,读写分离
一个简单完整的 Mysql 主从复制,读写分离的示意图. 1. 首先搭建 Mysql 主从架构,实现 将 mater 数据自动复制到 slave MySQL 复制的工作方式很简单,一台服务器作为主机, ...
- mysql主从复制以及读写分离
之前我们已经对LNMP平台的Nginx做过了负载均衡以及高可用的部署,今天我们就通过一些技术来提升数据的高可用以及数据库性能的提升. 一.mysql主从复制 首先我们先来看一下主从复制能够解决什么问题 ...
- Mysql主从复制,读写分离(mysql-proxy)
Mysql主从复制,读写分离(mysql-proxy) 下面介绍MySQL主从复制,读写分离,双主结构完整构建过程,不涉及过多理论,只有实验和配置的过程. Mysql主从复制(转载请注明出处,博文地址 ...
- Linux下MySQL主从复制(GTID)+读写分离(ProxySQL)-实施笔记
GTID概念: GTID( Global Transaction Identifier)全局事务标识.GTID 是 5.6 版本引入的一个有关于主从复制的重大改进,相对于之前版本基于 Binlog 文 ...
- MySQL 主从复制与读写分离 (超详细图文并茂小白闭着眼睛都会做)
MySQL 主从复制与读写分离 1.什么是读写分离 2.为什么要读写分离 3.什么时候要读写分离 4.主从复制与读写分离 5.mysql支持的复制类型 6.主从复制的工作过程 7.MySQL主从复制延 ...
- 30.Mysql主从复制、读写分离
Mysql主从复制.读写分离 目录 Mysql主从复制.读写分离 读写分离 读写分离概述 为什么要读写分离 什么时候要读写分离 主从复制与读写分离 mysql支持的复制类型 主从复制的工作过程 初始环 ...
- Mysql 主从复制,读写分离设置
一个简单完整的 Mysql 主从复制,读写分离的示意图. 1. 首先搭建 Mysql 主从架构,实现 将 mater 数据自动复制到 slave MySQL 复制的工作方式很简单,一台服务器作为主机, ...
- Windows操作系统下的MySQL主从复制及读写分离[转]
mysql主从复制配置 保证主库和从库数据库数据一致 mysql主库MASTER配置(在my.cnf中加入以下配置):log-bin=master-binbinlog-do-db=test #需要 ...
随机推荐
- MonkeyDev安装--逆向开发
MonkeyDev是原有iOS OpenDev的升级,非越狱插件的开发集成神器! 可以使用Xcode开发CaptainHook Tweak.Logos Tweak 和 Command-line Too ...
- MySQL UNION 操作符
本教程为大家介绍 MySQL UNION 操作符的语法和实例. 描述 MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中.多个 SELECT 语句会删除重复 ...
- C# 文件监听类 FileSystemWatcher 属性
属性: Path——这个属性告诉FileSystemWatcher它需要监控哪条路径.例如,如果我们将这个属性设为“C:Temp”,对象就监控那个目录发生的所有改变.IncludeSubDirecto ...
- 如何大批量的识别图片上的文字,批量图片文字识别OCR软件系统
软件不需要安装,直接双击打开就可以用,废话不多说直接上图好了,方便说明问题 批量图片OCR(批量名片识别.批量照片识别等)识别,然后就下来研究了一下,下面是成果 使用步骤:打开单个图片识别,导入文件夹 ...
- MySQL难点语法——连接
本篇涉及的数据表格可以自行查阅上篇<MySQL难点语法——子查询> MySQL的数据表格之间有三种连接方式:等值连接.外连接.自连接.以下是通过举例介绍这三种连接方式 1.等值连接 等值连 ...
- tcbRouter
tcb-router 基于koa风格的小程序·云开发云函数轻量级类路由库,主要用于优化服务端函数处理逻辑 安装 在云函数当前目录下安装:npm install --save tcb-router 使 ...
- jQuery实现的全选、反选和获取当前所有选中的值功能
链接: jQuery实现的全选.反选和获取当前所有选中的值功能 <ul id="list"> <li><label><input type ...
- flink PageRank详解(批量迭代的页面排名算法的基本实现)
1.PageRank算法原理 2.基本数据准备 /** * numPages缺省15个测试页面 * * EDGES表示从一个pageId指向相连的另外一个pageId */ public clas ...
- 爱奇艺 登录 加密字段 passwd 破解
这是一个rsa加密,并且每次加密候的数据固定不变. 第一步:查看加密字段 第二步:搜索加密参数 第三步:打断点调试 1 2 3. 第四部:js调试工具调试 第五步:源码 function c(a) { ...
- LOJ 3158: 「NOI2019」序列
题目传送门:LOJ #3158. 题意简述: 给定两个长度为 \(n\) 的正整数序列 \(a,b\),要求在每个序列中都选中 \(K\) 个下标,并且要保证同时在两个序列中都被选中的下标至少有 \( ...