MySQL主从复制

MySQL的主从复制只能保证主机对外提供服务,从机是不提供服务的,只是在后台为主机进行备份数据

首先我们说说主从复制的原理,这个是必须要理解的玩意儿:

理解:  

  • MySQL之间的数据复制的基础就是二进制日志文件bin log ,Master的所有操作都会纪录在二进制日志文件中,其他MySQL通过一个IO线程与其进行通信,监控这个日志文件的变化,并将变化赋值到Slave的中继日志relay中,然后SQL线程会执行中继日志中的相关操作,以此实现主从数据库的一致性,也就是主从复制

主从搭建,配置 Master

准备材料如下:

  • 分别装在两台Linux服务器上的数据库

  • master:192.168.159.159

  • slave : 192.168.159.169

master数据库配置文件修改:my.cnf

各自的安装方式不一样,我是通过rpm方式安装的,

在这里扩展一下: 通过这两个命令,大致发现了我的MySQL的安装目录

  

当然我的配置文件在在 /etc/mysql/my.cnf 在[mysqld]段下添加如下内容

log-bin=mysql-bin

server-id=159

  

然后重启Mysql: service mysqld restart

登录到MySQL建立账户并授权给Slave

mysql> CREATE USER 'chen'@'192.168.159.169' IDENTIFIED BY 'chen';  #创建用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.159.169'; #为其权限
mysql>flush privileges;   #刷新权限

  

然后查看master状态,记录二进制文件名( mysql-bin.000002 ) 和位置(787)

  

Master 到这里就配置完成了,下面配置 Slave

第一步修改从服务器的配置文件 : my.conf : server-id=135

  

第二步删除UUID文件: /var/lib/mysql/auto.cnf  后重新启动服务 :reboot

第三步登入MySQL,进行从服务器的配置 ,并开启从服务器复制功能

  • change master to master_host='192.168.159.159',master_port=3306,master_user='chen',master_password='chen',master_log_file='mysql-bin.000002',master_log_pos=787;

  • 开启从服务器的复制功能 : start slave;

  

检查从服务器的复制功能状态:show slave status\G

  

  • 相关的命令:

    • stop slave 可以停止 从服务器

    • reset slave 清空从服务器的规则

    • start slave 启动从服务器

    • show slave status 查看从服务器状态

    • show master status 查看主服务器状态

    • 注意:当我们已经完成了主从后,在不关闭的情况下,在创立新的主从关系会报错

下面就可以开始测试 ,测试就不写具体得了,在主服务器中增加或者修改一个数据,然后我们在从服务器中查询看是否做到数据一致即可。

MySQL-Proxy实现读写分离

主从的作用主要体现在备份数据上,要想做到MySQL支持高可用和高并发还需要集群,完成主从复制和读写分离

读写分离环境:

  • 主服务器:192.168.159.159 + MySQL-Proxy读写分离软件

  • 从服务器:192.168.159.169

  • 从服务器:192.168.159.179

  • 三台服务器都关闭防火墙 iptables -L service iptablesstop

  • 三台服务器关闭selinux 采用临时关闭,长久关闭修改 : /etc/selinux/config 将SELINUX设置为disabled

    临时关闭 :setenforce 0 | 查看状态: getenforce

一、安装MySQL-Proxy

https://downloads.mysql.com/archives/proxy/

我是上传到 /usr/local/ 下的

tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz  #解压文件
mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit 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 #复制管理脚本
vi /etc/mysql-proxy.cnf      #创建配置文件,并将下面内容写入

[mysql-proxy]
user=root            
admin-username=root   #主从mysql共有的用户
admin-password=123456 #用户的密码
proxy-address=192.168.159.110:4040                #mysql-proxy运行ip和端口,不加端口,默认4040
proxy-read-only-backend-addresses=192.168.159.169 #指定后端从slave读取数据
proxy-backend-addresses=192.168.159.159           #指定后端主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=debug    #定义log日志级别,由高到低分别有(error|warning|info|message|debug)
daemon=true       #以守护进程方式运行
keepalive=true    #mysql-proxy崩溃时,尝试重启

#保存退出后 给权限
chmod 660 /etc/mysql-porxy.cnf

三、修改读写分离配置文件

vim /usr/local/mysql-proxy/lua/rw-splitting.lua

vim /usr/local/mysql-proxy/lua/rw-splitting.lua
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1
max_idle_connections = 1, #默认8,改为1
is_debug = false
}
end

四、启动MySQL-proxy

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

五、测试读写分离

在主服务器上创建用户用于MySQL-Proxy使用,从服务器也会同步这个操作

grant all on . to 'chen'@'192.168.159.159' identified by 'root';

mysql> grant all on *.* to 'chen'@'192.168.159.159' identified by 'root';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

然后就报错了,MySQL的密码策略阻止了我们,不过没关系,我已经见怪不怪了,设置过好多回了

SHOW VARIABLES LIKE 'validate_password%'; #查看mysql初始密码策略

  • set global validate_password_policy=LOW; #设置密码的验证强度等级,只验证密码长度

  • set global validate_password_length=4; #默认密码长度为8,我们给其设置为4

  • 再次执行: grant all on . to 'chao'@'192.168.159.179' identified by 'root';

  

MySQL主从复制&读写分离&分库分表的更多相关文章

  1. Mycat安装并实现mysql读写分离,分库分表

    Mycat安装并实现mysql读写分离,分库分表 一.安装Mycat 1.1 创建文件夹 1.2 下载 二.mycat具体配置 2.1 server.xml 2.2 schema.xml 2.3 se ...

  2. Docker安装Mycat并实现mysql读写分离,分库分表

    Docker安装Mycat并实现mysql读写分离,分库分表 一.拉取mycat镜像 二.准备挂载的配置文件 2.1 创建文件夹并添加配置文件 2.1.1 server.xml 2.1.2 serve ...

  3. Mycat 读写分离+分库分表

    上次进过GTID复制的学习记录,已经搭建好了主从复制的服务器,现在利用现有的主从复制环境,加上正在研究的Mycat,实现了主流分布式数据库的测试 Mycat就不用多介绍了,可以实现很多分布式数据库的功 ...

  4. 读写分离&分库分表学习笔记

    读写分离 何为读写分离? 见名思意,根据读写分离的名字,我们就可以知道:读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上. 这样的话,就能够小幅提升写性能,大幅提升读性能. 我简单画了一 ...

  5. SpringCloud微服务实战——搭建企业级开发框架(二十七):集成多数据源+Seata分布式事务+读写分离+分库分表

    读写分离:为了确保数据库产品的稳定性,很多数据库拥有双机热备功能.也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器:第二台数据库服务器,主要进行读的操作. 目前有多种方式实现读写分离,一种 ...

  6. Django 数据库读写分离 分库分表

    多个数据库 配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BA ...

  7. Mycat实现mysql主从复制(读写分离)

    数据库性能瓶颈主要原因: 随着用户数的增多,带来的是数据库连接的大幅度增长 随着业务体量的增长,表数据量(空间存储的问题)的大幅增长,其中涉及到索引的优化,mysql默认的索引是硬盘级别的,BTREE ...

  8. mysql主从复制-读写分离

    mysql主从复制+读写分离 环境:mysql主:193.168.1.1mysql从:193.168.1.2amoeba代理:193.168.1.3########################## ...

  9. 重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践

    一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库 ...

随机推荐

  1. 【LeetCode】Math

    [263] Ugly Number [Easy] 一个数的质因子只有2,3,5就叫丑数,写个函数判断丑数. //Author: Wanying //注意 0 和 1 的corner case, 你居然 ...

  2. .babelrc配置例子

    { "presets":[ ["es2015",{"modlues":false}], "react", ], &quo ...

  3. thinkphp 图形处理

    使用Think\Image类进行图像处理功能,支持Gd库和Imagick库,包括对GIf图像处理的支持. 实例化类库 $image = new \Think\Image(); 默认使用GD库进行图像操 ...

  4. 构造——cf1213E

    分情况讨论,构造很简单 #include<bits/stdc++.h> using namespace std; #define N 200005 ],t[]; int n,s1,s2,t ...

  5. jmeter之-用Firefox录制https协议证书问题

    录制脚本的时候,比如录制https协议的百度网站 https://www.baidu.com ,所有录制设置均正常,但是在jmeter录制控制器里面就是没有任何录制的请求. 这个时候提示说证书不对 1 ...

  6. 安装beanstalkd - centos

    安装: wget https://github.com/kr/beanstalkd/archive/v1.9.tar.gz beanstalkd_v1. beanstalkd_v1..tar.gz . ...

  7. 数据结构学习笔记——顺序数组2

    接着昨天的数组操作,数组初始化好了,我们要往里面添加元素,可以在尾部追加或者插入,刚开始数组为空,所以先追加 int AppendList(SqList* pArr, ElemType val) { ...

  8. 第48章 MDK的编译过程及文件类型全解

    Frm: http://www.cnblogs.com/firege/p/5806134.html 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教 ...

  9. 将本地已有的一个项目上传到新建的git仓库的方法

    将本地已有的一个非git项目上传到新建的git仓库的方法一共有两种. 一. 克隆+拷贝 第一种方法比较简单,直接用把远程仓库拉到本地,然后再把自己本地的项目拷贝到仓库中去.然后push到远程仓库上去即 ...

  10. java实现后台自动发邮件功能

    web.xml文件 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE web-app PUBLI ...