博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql07---主从复制
阅读量:6343 次
发布时间:2019-06-22

本文共 3273 字,大约阅读时间需要 10 分钟。

mysql主从复制,replication,(可以一主多从,不可一从多主)原理: 主从分离,最少2台服务器。主服务器里面的数据,要在从服务器里面都有一份。把主服务器的所有insert,update操作,都记录在binlog二进制日志文件里面,从服务器来读取binlog进行操作。binlog是主服务器的,从服务器不能直接使用,要转换为relog再操作。1.主服务器要配置binlog2.从服务器要配置relaylog3.从服务器如何有权读取binlog(2个服务器的ip地址都不一样),主服务器就要授权slave账号,从服务器通过账号连接主服务器。实现步骤:1.首先确保主服务器打开二进制日志binlog功能,这样主服务器一旦有数据变化就立即产生二进制日志。2.从服务器也要开启二进制日志binlog(从服务器的二进制日志也要打开,便于以后恢复数据,如果这个从服务器有从服务器,那么二进制日志用得到的)和relay日志relay-log功能(从服务器多打开relay功能)。这样可以从主服务器读取binlog并产生relaylog3.在主服务器建立一个从服务器的账号,并授予读binlog的权限4.指定从服务器对应的主服务器,开启从服务器具体实施:1.200做从服务器,199为主服务器2.保证从3306端口互通3.配置主服务器,打开binlog/* binlog format : 主服务器update之后,从服务器也执行update。不看执行的语句,只看主服务器的磁盘变化了,从服务器就跟着磁盘变化。binlog format:row/statement   //2进制日志记录的格式statement:记录的是执行语句,如updaterow:记录磁盘的变化哪个好:update age=age+1 where id=3;    //语句长磁盘变化小,宜用rowupdate salary = saslary +10000;  //语句短,但是影响上万行,宜用statement,拿不准就用mixed:由系统判断。 *///配置主服务器192.168.1.201> [mysqld]datadir=/var/lib/mysqlsocket=/var/mysql/mysql.sockuser=mysqlsymbolic-links=0server-id=201                           //给服务器起一个独特的idlog-bin=mysql-bin                       //声明2进制日志的文件为mysql-bin-xxxxbinlog-format=mixed192.168.1.201> cd /var/lib/mysql/ 192.168.1.201> rm -rf ./mysql-bin*     //删除之前产生的日志文件192.168.1.201> service mysqld start    //重启mysql//配置从服务器192.168.1.202> [mysqld]datadir=/var/lib/mysqlsocket=/var/mysql/mysql.sockuser=mysqlsymbolic-links=0server-id=202       //给服务器起一个独特的idlog-bin=mysql-bin   //开启binlog,如果数据丢失了,但是二进制日志没有丢可以恢复数据。binlog-format=mixedrelay-log=mysql-relay   //从服务器多打开relay日志功能192.168.1.202> cd /var/lib/mysql/ 192.168.1.202> rm -rf ./mysql-bin*     //删除之前产生的日志文件192.168.1.202> service mysqld start    //重启mysql//主从服务器已经建立起来了,但是2者还没有关系//配置主服务器192.168.1.201> mysql -uroot -p        //登陆进去,cd /var/lib/mysql 可以看到mysql-bin.00001日志文件192.168.1.201> show master status     //可以查看当前binlog文件,可以看到他已经具有了主服务器的权限了(mysql库里面有表)192.168.1.201> grant replication client,replication slave on *.* to repl@'192.168.1.%' identified by 'repl'                     //授权账号,'192.168.1.%'局域网都可以,密码'repl',192.168.1.201> flush privileges    //现在有了一个repl账号,有权读取主服务器的binlog//配置从服务器192.168.1.202> mysql -uroot -p            //登陆进去192.168.1.202> show slave status     //(mysql库里面有表),现在是空的。192.168.1.202> change master to    //连接哪个主服务器               master_host='192.168.1.201',               master_user='repl',        //连接的时候使用什么账号               master_password='repl',               master_log_file='mysql-bin.00001',        //现在主服务器正在使用的binlog日志文件,通过主服务器show master status可以看到               master_log_pos=348;           //通过主服务器show master status可以看到192.168.1.202> show slave status            //可以看到已经打通了192.168.1.202> start slave            //起192.168.1.202> sop slave            //关闭192.168.1.202> start slave            //起192.168.1.202> show slave status    //看起的时候有没有错误。               //测试:主服务器有从服务器也有。//telnet 192.168.1.201 3306   ;   ping 192.168.1.201192.168.1.201> create database test8192.168.1.202> show database    //多了test8192.168.1.201> use test8192.168.1.201> create table stu(sid int,sname char(20))192.168.1.202> use test8     show database    //多了stu192.168.1.201>insert into stu values(1,'lili')192.168.1.202> #还有主主复制,你当我的主我当你的从。两台主主背后还可以拖着一个从。这时mysql的主从复制,但不是读写分离。读写分离是:读只从从服务器,insert.delete.update在主服务器。是sql语句自动分开执行。读写分离可以在php级别做判断,也可以用集群中间件例如mysql_proxy,

 

转载地址:http://fakla.baihongyu.com/

你可能感兴趣的文章
取消凭证分解 (取消公司下的多个利润中心)
查看>>
flask ORM: Flask-SQLAlchemy【单表】增删改查
查看>>
vim 常用指令
查看>>
nodejs 获取自己的ip
查看>>
Nest.js 处理错误
查看>>
MD5的安全性
查看>>
你好,C++(16)用表达式表达我们的设计意图——4.1 用操作符对数据进行运算...
查看>>
[转] Mac下 快速写博客的软件 MarsEdit
查看>>
Unity的赛车游戏实现思路
查看>>
[Android UI] Shape详解 (GradientDrawable)
查看>>
边学边体验django--HttpRequest 对象
查看>>
18.3 redis 的安装
查看>>
jdbc 简单连接
查看>>
多态初步认识
查看>>
数组处理:118
查看>>
为什么要优先使用组合而不是继承 .
查看>>
【MySql】权限不足导致的无法连接到数据库以及权限的授予和撤销
查看>>
android实现gif图与文字混排
查看>>
安卓新标准出台_告别乱弹窗_你的手机真会省电么?
查看>>
hdu1384Intervals(差分约束)
查看>>