0601----MySQL主从配置

任务

17.1 MySQL主从介绍
17.2 准备工作
17.3 配置主
17.4 配置从
17.5 测试主从同步

有的同学,遇到主从不能正常同步,提示uuid相同的错误。这是因为克隆机器导致。
https://www.2cto.com/database/201412/364479.html

扩展部分
不停库不锁表在线主从配置
http://seanlook.com/2015/12/14/mysql-replicas/
主从不同步
http://www.rfyy.net/archives/2309.html
http://blog.51cto.com/storysky/259280
主主
关于 auto_increment https://blog.csdn.net/leshami/article/details/39779509
http://www.cnblogs.com/ygqygq2/p/6045279.html
mysql-proxy 实现读写分离
http://blog.51cto.com/zzclinux/1980487
mysql-proxy类似的产品有:
mycat 基于阿里的开源软件cobar,官网 www.mycat.io
https://my.oschina.net/ruoli/blog/1789370
mycat实现分库分表
https://www.cnblogs.com/joylee/p/7513038.html
atlas 出自于360,不维护不更新了 https://blog.csdn.net/AnPHPer/article/details/80566385
mysql环形主从
http://ask.apelearn.com/question/11437
mysql架构演变 http://www.aminglinux.com/bbs/thread-8025-1-1.html
MHA架构
http://blog.51cto.com/xiaoshuaigege/2060768
比较复杂的mysql集群架构 http://ask.apelearn.com/question/17026

MySQL主从介绍

MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的,MySQL主从基于binlog,主上须开启binlog才能进行主从。

MySQL主从过程大致有3个步骤
1)主将更改操作记录到binlog里
2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里
3)从根据relaylog里面的sql语句按顺序执行

MySQL主从有3个线程:
主上有一个log dump线程,用来和从的I/O线程传递binlog
从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地
主从复制原理图:
在这里插入图片描述
mysql主从使用场景:
1)数据备份,主机器宕机,从机器还能随时对web提供服务
2)从机器用来做读的库,主机器用来做写入的库。mysql主从,是有方向性的,写数据,必须从主机器。

准备工作

做实验需要两台机器,且都需要mysql;
主机1 linux-03 192.168.190.105
主机2 linux-04 192.168.190.107
mysql安装详见https://blog.csdn.net/weixin_43945846/article/details/90173413

配置主

192.168.190.105 作为主(master)
编辑配置文件,写入以下内容
vim /etc/my.cnf

server-id=105    //server-id为任意数字
log_bin=linux-03  //前缀

在这里插入图片描述

重启mysql服务
/etc/init.d/mysqld restart在这里插入图片描述
数据库数据目录下生成了两个文件,linux-03.000001和linux-03.index
在这里插入图片描述
我们将数据库中的test1进行备份,再新建test2数据库,将test1导入
mysqldump -uroot -p123456 test1 >/tmp/test1.sql
mysql -uroot -p123456 -e ‘create database test2’
mysql -uroot -p123456 test2 < /tmp/test1.sql
在这里插入图片描述
进入数据库,授予repl用户(所属IP)从复制权限,针对所有的数据库及表,并设置密码
grant replication slave on . to ‘repl’@‘192.168.190.107’ identified by ‘123456’;

replication slave 从复制权限
*.*  数据库.表
 'repl'@'192.168.190.107'       登陆的用户名及IP

锁定数据库以防止写入数据
flush tables with read lock;
在这里插入图片描述
查看master状态
在这里插入图片描述
把需要主从复制的数据库都备份
mysqldump -uroot -p123456 test2 >/tmp/test2.sql
在这里插入图片描述

配置从

192.168.190.107 作为主(slave)

编辑配置文件,写入以下内容
vim /etc/my.cnf

server-id=107    //和主上配的不能相同

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190531152119656.png

重启mysql服务
/etc/init.d/mysqld restart
在这里插入图片描述
将主上备份的数据库文件复制到从上
scp 192.168.190.105:/tmp/test1.sql /tmp/
scp 192.168.190.105:/tmp/test2.sql /tmp/
在这里插入图片描述
创建对应的数据库
在这里插入图片描述
把复制过来的数据库恢复
mysql -uroot -p123456 test1 </tmp/test1.sql
mysql -uroot -p123456 test2 </tmp/test2.sql
停止 io及sql线程
stop slave;

设置slave从机与master主机进行通信;
mysql> change master to master_host=‘192.168.190.105’,master_user=‘repl’,master_password=‘123456’,master_log_file=‘linux-03.000001’,master_log_pos=649273;

释义:
master_host 与 master_port:分别代表master主机名(或IP地址)及mysql实例端口号。端口默认为3306,则可以省略;
master_user 与 master_password:连接到master主机复制账户所对应的用户名及密码。
master_log_file 与 master_log_pos:确定slave的io线程下次开始执行时从master开始读取的位置坐标,如果二者都没有指定,slave使用上次slave sql线程保存的位置。
注意:change master to可以不带参数,如:只改变了用于复制的用户密码,那么change master to只需针对master_password选项作出修改即可。

开启io及sql线程
start slave;
查看slave状态
show slave status;
在这里插入图片描述
配置成功后,在主数据库上解锁表
unlock tables;
在这里插入图片描述

测试主从同步

数据库及表同步也可以指定,主从上命令不同:
主服务器:
binglog-do-db=1,2 //仅同步指定的库1和2
bing-ignore-db=3 //忽略指定的库3
从服务器:
replicate-do-db=
replicate-ignore-db=
replicate-do-table
replicate-ignore-table=
replicate-wild-do-table= // 常用
replicate-wild-ignore-table= // 常用

在主数据库上进行操作
在这里插入图片描述
在从数据库上查看
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43945846/article/details/90714861
今日推荐