mysql数据库负载均衡⾼可⽤之主从、主主备份,实时同步⼀:MySQL Replication
什么是MySQL Replication
Replication可以实现将数据从⼀台数据库服务器(master)复制到⼀或多台数据库服务器(slave)
默认情况下属于异步复制,⽆需维持长连接
通过配置,可以复制所有的库或者⼏个库,甚⾄库中的⼀些表
是MySQL内建的,本⾝⾃带的
Replication的原理
简单的说就是master将数据库的改变写⼊⼆进制⽇志,slave同步这些⼆进制⽇志,并根据这些⼆进制⽇志进⾏数据操作
DML:SQL操作语句,update, insert,delete
Relay log :中继⽇志
Replication的作⽤
1、Fail Over  故障切换java数组类
2、Backup Server 备份服务,⽆法对SQL语句执⾏产⽣的故障恢复,有限的备份
3、High Performance⾼性能,可以多台slave,实现读写分离
Replication如何⼯作
整体上来说,复制有3个步骤:
(1)    master将改变记录到⼆进制⽇志(binary log)中(这些记录叫做⼆进制⽇志事件,binary log events);
(2)    slave将master的binary log events拷贝到它的中继⽇志(relay log);
(3)    slave重做中继⽇志中的事件,修改salve上的数据。
mysql主从复制中:
第⼀步:master记录⼆进制⽇志。在每个事务更新数据完成之前,master在⼆进制⽇志记录这些改变。MySQL将事务写⼊⼆进制⽇志,即使事务中的语句都是交叉执⾏的。在事件写⼊⼆进制⽇志完成
后,master通知存储引擎提交事务。
第⼆步:slave将master的binary log拷贝到它⾃⼰的中继⽇志。⾸先,slave开始⼀个⼯作线程——I/O线程。I/O线程在master上打开⼀个普通的连接,然后开始binlog dump process。Binlog dump process从master的⼆进制⽇志中读取事件,如果已经执⾏完master产⽣的所有⽂件,它会睡眠并等待master产⽣新的事件。I/O线程将这些事件写⼊中继⽇志。
第三步:SQL slave thread(SQL从线程)处理该过程的最后⼀步。SQL线程从中继⽇志读取事件,并重新执⾏其中的事件⽽更新slave 的数据,使其与master中的数据⼀致。
Replication常见⽅案:
1、One master and Muti salve  ⼀主多备
⼀般⽤来做读写分离的,master写,其他slave读,这种架构最⼤问题I/O压⼒集中
在Master上<;多台同步影响IO>
2、M-S-S
使⽤⼀台slave作为中继,分担Master的压⼒,slave中继需要开启bin-log,并配置log-slave-updates
Slave中继可使⽤Black-hole存储引擎,不会把数据存储到磁盘,只记录⼆进制⽇志
3、M-M  双主互备 (互为主从)
很多⼈误以为这样可以做到MySQL负载均衡,实际没什么好处,每个服务器需要做同样的同步更新,破坏了事物的隔离性和数据的⼀致性
4、M-M-M
监控三台机器互相做对⽅的master
天⽣的缺陷:复制延迟,slave上同步要慢于master,如果⼤并发的情况那延迟更严重
Mysql在5.6已经⾃⾝可以实现fail over故障切换
5、One slave Muti master  ⼀从对多主
好处:节省成本,将多个master数据⾃动化整合
缺陷:对库和表数据的修改较多
⼆:部署MySQL主从同步 <M-S>
环境准备:
主机名IP系统/MySQL版本⾓⾊
harry6310.10.10.63CentOS7.4/5.7.20Master
harry6410.10.10.64CentOS7.4/5.7.20slave
模式:C/S
端⼝:3306
配置主数据库服务器HARRY63
创建需要同步的数据库:
mysql> create database HA;
mysql> use HA;
mysql> create table T1(id int,name varchar(20));
service mysqld stop
配置myf:
vim /etc/myf
log-bin=mysql-bin-master  #启⽤⼆进制⽇志
server-id=1  #本机数据库ID 标⽰
binlog-do-db=HA #可以被从服务器复制的库, ⼆进制需要同步的数据库名binlog-ignore-db=mysql  #不可以被从服务器复制的库
重启mysql  ( 如果重启卡死现象,kill掉再启动)
Systemctl restart mysqld
授权:
mysql> grant replication slave on *.* to  identified by "123456";
查看状态信息:
mysql> show master status;
+-------------------------+----------+--------------+------------------+
| File                    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------------+----------+--------------+------------------+
| mysql-bin-master.000001 |      259 | HA          | mysql            | +-------------------------+----------+--------------+------------------+
查看⼆进制⽇志:
ls /usr/local/mysql/data/
mysql> show binlog events\G
复制前要保证同步的数据库⼀致
mysqldump  -uroot -p123456 HA >HA.sql  #可以导出数据库
将导出的数据库传给从服务器
⽅法:scp HA.sql  10.10.10.64:/root
配置从数据库服务器HARRY64
两台数据库服务器mysql版本要⼀致
mysql> show variables like '%version%';
测试连接到主服务器是否成功
mysql -uslave -p123456 -h 10.10.10.63
mysql无法连接到服务器只有复制的权限, 是看不到其他库的。正常
导⼊数据库,和主数据库服务器保持⼀致
mysql> create database HA;
mysql -uroot -p123456 HA<HA.sql网站推荐免费的软件
修改从服务器配置⽂件:
从服务器没必要开启bin-log⽇志
service mysqld stop
vim /etc/myf
master-host=192.168.1.63 #指定主服务器IP地址
master-user=slave  #指定定在主服务器上可以进⾏同步的⽤户名
master-password=123456 #密码
#master-port=3306
master-connect-retry=60  #断点重新连接时间
server-id = 2  #从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有⼀个唯⼀的server-id值,必须与主服务器的以及其它从服务器的不相同。可以认为server-id值类似于IP地址:这些ID值能唯⼀识别复制服务器集中的每个服务器实例。
⽂本框是mysql 5.1的配置
mysql>stop slave;    #停⽌slave
mysql> change master to master_host='10.10.10.63',master_user='slave',master_password='123456';
mysql> start slave;    #启动slave
mysql> show slave status\G  查看状态
Slave_IO_Running :⼀个负责与主机的io通信
Slave_SQL_Running:负责⾃⼰的slave mysql进程
两个为YES 就成功了!
再到主服务器上查看状态:
mysql> show processlist \G
插⼊数据测试同步:
mysql> insert into T1 values (1,'man');
access sql语句大全从数据库上查看:
排错:
如果遇到主从不同步,看⼀下主从bin-log的位置,然后再同步。
在主服务器上看⼆进制⽇志事件列表
mysql> show binlog events \G
从服务器执⾏MySQL命令下:
mysql> stop slave;            #先停⽌slave服务
appletalkmysql> change master to master_log_file='mysql-bin-master.000001',master_log_pos=1164;
#根据上⾯主服务器的show master status的结果,进⾏从服务器的⼆进制数据库记录回归,达到同步的效果mysql>slave start;                      #启动从服务器同步服务
mysql> show slave status\G;          #⽤show slave status\G;看⼀下从服务器的同步情况
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果都是yes,那代表已经在同步
重启从服务器,再查看状态:
停⽌从服务器slave stop;
开启从服务器slave start;
排错思路:
1、⼆进制⽇志没有开启
2、IPTABLES 没有放开端⼝
3、对应的主机 IP地址写错了
SQL线程出错
1、主从服务器数据库结构不统⼀
出错后,数据少,可以⼿动解决创建插⼊,再更新slave状态。
注:如果主上误删除了。那么从上也就误删除了。  #因此主上要定期做mysqldump备份。
三:部署MySQL主主双向主从复制 M-M
通过mysql主主:进⾏mysql 双向同步数据库HA的配置
mysql主:服务端:HARRY63  IP:10.10.10.63
mysql主:服务端:HARRY64  IP:10.10.10.64
要先清空⼀下⼆进制⽇志,mysql> reset master
在上⾯主从的基础上进⾏配置
商城模板网站模板配置HARRY63
它有两种⾝份:
⾝份1: HARRY64的主。 ⾝份2: HARRY64的从。
vim /etc/myf
server-id = 1
log-bin=mysql-bin-master

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。