栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

mysql 主从复制

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mysql 主从复制

前言
在很多项目,特别是互联网项目,在使用MySQL时都会采用主从复制、读写分离的架构。

为什么要采用主从复制读写分离的架构?如何实现?有什么缺点?让我们带着这些问题开始这段学习之旅吧!

**

为什么使用主从复制、读写分离

**
主从复制、读写分离一般是一起使用的。目的很简单,就是为了提高数据库的并发性能。你想,假设是单机,读写都在一台MySQL上面完成,性能肯定不高。如果有三台MySQL,一台mater只负责写操作,两台salve只负责读操作,性能不就能大大提高了吗?

所以主从复制、读写分离就是为了数据库能支持更大的并发。

随着业务量的扩展、如果是单机部署的MySQL,会导致I/O频率过高。采用主从复制、读写分离可以提高数据库的可用性。
主从复制的原理
①当Master节点进行insert、update、delete操作时,会按顺序写入到binlog中。

②salve从库连接master主库,Master有多少个slave就会创建多少个binlog dump线程。

③当Master节点的binlog发生变化时,binlog dump 线程会通知所有的salve节点,并将相应的binlog内容推送给slave节点。

④I/O线程接收到 binlog 内容后,将内容写入到本地的 relay-log。

⑤SQL线程读取I/O线程写入的relay-log,并且根据 relay-log 的内容对从数据库做对应的操作。

如何实现主从复制

我这里用三台虚拟机(Linux)演示,IP分别是104(Master),106(Slave),107(Slave)。

预期的效果是一主二从,如下图所示:

mv /usr/share/mysql/my-medium.cnf /etc/my.cnf   替换默认配置文件  一般情况下 使用这个的较多
编辑  vim /etc.my.cnf
主库  master
server-id       = 100   主要就是用来区分master库和slaver库的
log-bin=mysql-bin   开启master的二进制文件  名字可以自定义
log-slave-update=true   这个手写  开启从库可以读取主库的二进制log 进行update操作
从库 slave
server-id       = 200   有几台slave就写几个  不要重复
relay-log=xxx-log-bin  从master同步过来  也要记一下二进制的
relay-log-index=relay-log-bin.index  可以自定义  文件量大  要做个索引

全局配置  做好以后
systemctl enable mariadb  开机自启
systemctl start mariadb   启动数据库
设置个密码   mysql -uroot password ‘xxxxx’  


做好这些后   要赋予salve权限  可以从master同步的权限
查看权限的命令  show privileges;

有了这个权限了  得有相应的用户  需要建立一个用户去做这件事情 slave机器就能通过这个用户的这个权限去做这件事了
grant Replication slave on *.* to slaver@'192.168.60.60' identified by 'qweqwe';

flush privileges;刷新 刷新下权限

在salve机器上  看下
show  master status;
MariaDB [(none)]> show  master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      383 |              |                  |
+------------------+----------+--------------+------------------+
file  就是这个master的二进制文件  
Position   二进制文件的编号
slave  就是从 这个二进制文件的这个编号开始同步

从库
change master to master_host='192.168.60.66',master_user='slaver@192.168.60.66',master_password='qweqwe',master_log_file='mysql-bin.000003',master_log_pos=616;

start slave;  开启同步  在slave上做

show slave statusG;   查看状态

二进制文件 /var/lib/mysql/

读写分离
amoba

要有有个中介器来进行连接数据库进行分配权限  就是amoba
首先 既然amoba要链接数据库  要先有一个账号
1  在所有数据库创建账号
grant all on *.* to 'amoba'@'192.168.60.%' identified by '123123';
所有节点都做
2,编辑amebo的配置文件
  vim /usr/local/amobe/conf/amoba.xml
   root   改下amebo的user  可以自定义
   密码
   接下来要配置什么呢  既然要实现读写分离  肯定要定义数据库的读池和写池  怎么定义呢 
   一般client访问进来有个默认的池  可以自定义默认访问的  但要先定义读写池的名字  我这里 写池叫 master  读池叫slavs 所以我定义的默认进来访问的是写池
              默认访问进来是进那个组 master

                master
                slaves
到这里  大框架就定义完了
该定义细节了  就是到底谁是master  谁是slaves
在 /usr/local/amoba/amoeba/amoeba-mysql-3.0.5-RC/conf/dbServers.xml  注意  是dbServers.xml这个文件

进来后要定义 连接数据库使用的账号密码
         amoba

                        123123

           




完成后启动

 /usr/local/amoba/amoeba/amoeba-mysql-3.0.5-RC/bin/launcher
创建完后进行 登录  登录这里不是登录数据库 而是登录amoeba服务器登录mysql 
mysql -u amoba -p -h 36.107.225.218 -P 8066  
这里就是之前定义的amoba的账号密码
登录上测试主从
create database xxx;
use xxx;
create table tables(id int,name varchar(10),age int);

注意测试读写之前  要将主从先做好。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/891072.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号