先来弄MySQL主从复制
那先来说一下什么是主从复制呢?
主从复制简单的来说就是创建了个与主数据库一模一样的库和库环境,人们一般称之为从数据库。
MySQL的主从复制是怎么完成的呢?(主从复制的原理)
主节点:需要指定自己的唯一标识server-id以及开启二进制日志(用于记录主库增删改的操作),对从数据库进行授权(权限为replication ,slave)
从节点:需要指定自己的唯一标识server-id以及开启中继日志(用于存放从主节点二进制日志获取到的日志信息)需要指定自己的主节点是谁(指定的信息有哪个节点的地址host,主节点授权的用户和密码,要同步主节点那个二进制的信息,以及从二进制日志的那个位置开始同步)
那MySQL的主从复制的过程又是什么样子的呢?
从节点开启从状态之后会派生俩个线程,I/O线程和SQL线程。主节点会派生一个dump的线程
I/O线程主要用于去获取主节点的二进制日志里的信息,在I/O线程发送请求时需要指明自己要找的主节点是谁,以及要找的二进制日志的具体位置
主节点的dump线程用来接收并处理I/O线程发送来的请求,将I/O线程请求的内容发送给I/O线程
I/O线程将从主节点获取到的日志信息存放在从库的中继日志中,I/O线程工作完成(本次工作完成)
为了使主从节点需要执行中继日志最新获取的跟SQL语句相关的内容,就是需要SQL线程对中继日志的SQL语句进行提取之后再执行,来实现主节点的数据同步过程
在这个过程中,从节点获取到二进制日志信息之后需要及时更新所记录的要获取的二进制日志的偏移量,以确保下次同步不再获取已经有的操作
从节点中继日志中的SQL语句执行完成后也需要及时更新中继日志的偏移量
(大家可以看一下下面这张图)
![ec8ca882448e1bcb295dd855b7e31e9b.png](https://i-blog.csdnimg.cn/blog_migrate/19d5c43cf4c6114626558a3da9158295.jpeg)
下面我们举个例子:
更改数据库的配置文件:
/etc/my.cnf
【mysqld】
Server-id = 1 节点标识符
log-bin = mysql-bin 开启二进制日志
主数据库授权:
![5d9b6ad634b751810c85c100f6d59a63.png](https://i-blog.csdnimg.cn/blog_migrate/1eee6b206cc21d4c5fe514575a7df46d.jpeg)
从数据库开启中继日志:
![042354a68ac76d9d0fc71685e3667697.png](https://i-blog.csdnimg.cn/blog_migrate/e6837446fb9dcee50ee5760b495c712d.jpeg)
进入数据库连接主数据库;
![e16ede6c77ce0f0f8948ef636f45ecc5.png](https://i-blog.csdnimg.cn/blog_migrate/d4e8eb25bd47dc49e48a44a75eac13fd.jpeg)
接下来我们创建一个数据库验证一下(主服务器新创建了一个库zhaosir)
![da75fa003de5d273f2ebd6b67f3497a8.png](https://i-blog.csdnimg.cn/blog_migrate/8da035573559e8a82723c8c1669744a6.jpeg)
我们再从服务器查看一下(同步完成)
![a05c670442ac24d830408fc4249a219e.png](https://i-blog.csdnimg.cn/blog_migrate/b38895496bd6b20eadc906cbf8cbd910.jpeg)
![3927e453a56220aadce8002a3fec4c82.png](https://i-blog.csdnimg.cn/blog_migrate/dbfe8b43a7ca9c34c1b5ce2a01628ee7.jpeg)
接下来我们来说一下主主结构
什么是主主结构呢?
简单的来说就是两台或者多台数据库互为主从结构,当有一台发生变化另一台也发生变化,这样有一个好处就是有了负载均衡的效果。
那么接下里我们来做一下多主架构:
我一共用了四台分别为:
![25391aa3a1e20ee4ed675b9a1bf3bb8b.png](https://i-blog.csdnimg.cn/blog_migrate/831a15bd9e9f46ba57b8bf4164e4c43e.jpeg)
结构和大家说一下,主1和主2互为主从,主1和从1为主从,主2和从2为主从。
主1的配置文件(重启)
![b2f95e890831146e6c3dc88f8d9d5e76.png](https://i-blog.csdnimg.cn/blog_migrate/8f92b25b6908aeb059c950ec9d4cfc3c.jpeg)
主2的配置文件(重启)
![c34f0a117991abe86bf3fb07b5a05577.png](https://i-blog.csdnimg.cn/blog_migrate/4929d43c305059b4ab9abfac87409624.jpeg)
从1的配置文件(重启)
![e8598708f4026a0089ca23eaa67daa98.png](https://i-blog.csdnimg.cn/blog_migrate/9c936ff7de895c2c9bed8af32c628148.jpeg)
从2的配置文件(重启)
![fbc9c23b364e7d82c4ca80e3ffef7fb9.png](https://i-blog.csdnimg.cn/blog_migrate/58ab30a7aed14e71858bf769083fac0f.jpeg)
主1MySQL的配置(连接的是主2)
![c518a8e4b64fa1716c08e1e0cfaf3085.png](https://i-blog.csdnimg.cn/blog_migrate/45189eb7875f3fdecc74c69e97bf1896.jpeg)
![c188b952e92fbc740134efce75c0baa8.png](https://i-blog.csdnimg.cn/blog_migrate/86983885c39948a1f5a7fc6ad85422b7.jpeg)
主2的MySQL配置(连接的是主1)
![6d21f8f747fa3dc28f2b88932017a7a4.png](https://i-blog.csdnimg.cn/blog_migrate/0bdea848cd737a9fecd00aac9bfc3b5d.jpeg)
从1MySQL连接到1
![22820fa9ba643a38bbfa21e5a3b8deb6.png](https://i-blog.csdnimg.cn/blog_migrate/73d26e30ba70d9bd525089d361545da9.jpeg)
从2MySQL连接到主2
![c273f2c1fce991db5902d2645ac13da5.png](https://i-blog.csdnimg.cn/blog_migrate/c52efa5a9280687718a8c086617b405e.jpeg)
架构制作完毕(我们来验证一下)
在主1创建一个testA,主创建testB。
![ff996d3d97356abbb82fea353d09e8e9.png](https://i-blog.csdnimg.cn/blog_migrate/fa7e2d374d0d79ef2702e0cac1cab283.jpeg)
![b2649b730bacd1fe3e7601b0d9ce1306.png](https://i-blog.csdnimg.cn/blog_migrate/960f4849f3a2edda71300f065c871b59.jpeg)
我们查看一下
![d9ee095055ef6941d60de15d6b2290fb.png](https://i-blog.csdnimg.cn/blog_migrate/b1347e6b5f97a45cb79936afb52672d8.jpeg)
![19920c66925b933f0dec7881c45cfa01.png](https://i-blog.csdnimg.cn/blog_migrate/28d9298e3eeec4bf97004c76186d9bd2.jpeg)