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. HDU-4747 二分+线段树

    题意:给出长度为n的序列,问任两个区间的mex运算结果的总和. 解法:直接讲线段树做法:我们注意到mex(1,1),mex(1,2),mex(1,3)...mex(1,i)的结果是单调不减的,那么我们 ...

  2. web.xml中配置——配置springmvc

    <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springfr ...

  3. Vuex白话教程第六讲:Vuex的管理员Module(实战篇)

    写在前面 这一讲是 Vuex 基础篇的最后一讲,也是最为复杂的一讲.如果按照官方来的话,对于新手可能有点难以接受,所以想了下,决定干脆多花点时间,用一个简单的例子来讲解,顺便也复习一下之前的知识点. ...

  4. 【leetcode】133. Clone Graph

    题目如下: Given the head of a graph, return a deep copy (clone) of the graph. Each node in the graph con ...

  5. Database - 数据库隔离级别

    总结 数据库在并发的情况下,可能会出现: 脏读 不可重复读 --> 原因:UPDATE操作 幻读 --> 原因:INSERT/DELETE操作 为了避免以上问题,数据库事务增加隔离级别,来 ...

  6. cmake build

    { //cmake CMakeLists.txt -G "Visual Studio 15 2017" }

  7. python对具有宏excel的操作

    一.使用win32com库 安装pip install pypiwin32 import win32com.client #excel xlApp =win32com.client.DispatchE ...

  8. 使用ionic来build安卓apk时,报CordovaError: Requirements check failed for JDK 1.8 or greater

    本地配置了JDK和jre的本地环境变量之后,在命令行中运行Java.javac等都能正常输出,但是在使用ionic cordova build android 来打包ionic的程序时,会提示 Cor ...

  9. 13、java获取路径

    1.获取WEB-INF文件夹下的文件 /C:/Users/Administrator/Workspaces/MyEclipse%2010/day_38_spring_hibernate/WebRoot ...

  10. myeclipse 启动卡住的解决办法

    myeclipse 启动卡住的解决办法 今天启动myeclipse突然卡住,CPU一直占用,启动任务管理器强制关闭.重启myeclipse,重启电脑都不能够解决. 上网查找,在工程路径(工作空间的路径 ...