任务
17.1 MySQL主从介绍
17.2 准备工作
17.3 配置主
17.4 配置从
17.5 测试主从同步
有的同学,遇到主从不能正常同步,提示uuid相同的错误。这是因为克隆机器导致。
https://www.2cto.com/database/201412/364479.html
其他原因报错解决方法
https://www.cnblogs.com/l-hh/p/9922548.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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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 //和主上配的不能相同
及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= // 常用
在主数据库上进行操作
在从数据库上查看