设为首页 收藏本站
查看: 420|回复: 0

[经验分享] mysql主从复制

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-4-8 09:17:51 | 显示全部楼层 |阅读模式

一、主从同步的作用

   1、数据分布

   2、负载均衡(load balancing)

   4、高可用性(high availability)和容错

二、主从同步原理

1、二进制日志

   想要做主从复制必须得有这个二进制日志,那二进制日志记录的是什么呢?二进制日志中保存的只是跟服务器修改相关的操作,也叫复制日志

   二进制日志为了避免日志文件过大,要进行不停地滚动,其主要有两个功能:

   (1)即时点恢复

   (2)复制

   因为二进制日志有即时点恢复功能,所以万一某天一个不小心失误把数据库删了,只要二进制日志文件保存完好,就可以把我们的数据恢复回来。可见二进制日志是非常重要的,因此二进制日志千万不要和你的数据库目录放到一起,而要另找一个位置保存

   今天我们要做的是利用他的第二个功能完成主从复制

2、中继日志

   中继日志和复制相关,中继日志是从服务器从主服务器上读取主服务器上二进制日志中的事件,每读一个过来,并保存到本地。

3、主从同步原理

wKiom1NL6CuzBZn2AAF0SQq6SYk430.jpg

   原理详解:

   1)主服务器发生数据更改操作,数据写入到数据文件和二进制文件中,然后去唤醒从服务器的I/O线程(IO thread)

   2)从服务器的IO thread来请求主服务器并把从主服务器的binlog dump线程返回结果写入到本地中继日志中

   3)从服务器的SQL thread每读一条中继日志,然后写一条到本地数据文件中

   4)此过程中,从服务器只是同步主服务器的数据,所以他无需开启二进制日志,而且从服务器最好设为只读模式

   5)主从复制并不是一个备份的过程,它只是一个数据同步的过程,因为,如果你在主服务器上删除一个库,那你会发现从服务器上也没有了

   6)从服务器并不能负载主服务器的写操作,它只可以负载主服务器的读操作;因为,不管你主服务器写多少,从服务器都会通过它的中继日志和主服务器的二进制日志同步到它本地的

主从同步配置过程总结

1、主服务器

   1)修改server-id

   2)启用二进制日志

   3)创建有复制权限的账号

2、从服务器

   1)修改server-id

   2)启用中继日志

   3)连接主服务器

   4)启程复制线程  


三、主从同步的实现

1、修改主服务器的配置文件,我这里的数据目录在/mydata/data下,为了安全,我把二进制日志放到了/mydata/binlogs下,别忘了给这几个目录设置属主和属组为mysql用户,mysql组

1
2
3
4
5
6
7
8
9
datadir=/mydata/data                                               指定数据目录
# binary logging is required for replication
log-bin=/mydata/binlog/master-bin                                  二进制日志目录
# binary logging format - mixed recommended
binlog_format=mixed                                                二进制格式设为混合模型
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id       = 1                                                 主服务id为1



启动服务器    service mysqld start  

2、在主服务器上创建有复制权限的账号

1
2
3
4
mysql> grant replication slave,replication client on *.* to'repluser'@'192.168.%.%' identified by 'replpass';
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)



3、在从服务器上修改主配置文件,方法同上一步

[iyunv@xuxu ~]# mkdir /mydata/relaylogs       创建中继日志目录
[iyunv@xuxu ~]# chown -R mysql.mysql /mydata/relaylogs
1
2
3
4
datadir=/mydata/data                指定数据目录
read-only = on                      开启只读
server-id       = 11                id改为11
relay-log = /mydata/relaylogs/relay-bin       开启中继日志



4、查看从服务器的中继日志是否启动成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> show global variables like '%relay%';
+-----------------------+-----------------------------+
| Variable_name         | Value                       |
+-----------------------+-----------------------------+
| max_relay_log_size    | 0                           |
| relay_log             | /mydata/relaylogs/relay-bin |
| relay_log_index       |                             |
| relay_log_info_file   | relay-log.info              |
| relay_log_purge       | ON                          |
| relay_log_recovery    | OFF                         |
| relay_log_space_limit | 0                           |
| sync_relay_log        | 0                           |
| sync_relay_log_info   | 0                           |
+-----------------------+-----------------------------+



5、在主服务器上查看其状态信息

1
2
3
4
5
6
7
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000003 |      358 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)




6、查看从服务器的状态信息,检查是否连接主服务器成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State:
                  Master_Host: 192.168.211.133         主服务器
                  Master_User: repluser                主机名
                  Master_Port: 3306                    端口号
                Connect_Retry: 60
              Master_Log_File:
          Read_Master_Log_Pos: 4
               Relay_Log_File: relay-bin.000001          还没开始写哩
                Relay_Log_Pos: 4
        Relay_Master_Log_File:  
             Slave_IO_Running: No                  线程还没启动
            Slave_SQL_Running: No



7、开启线程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: 192.168.211.133
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File:
          Read_Master_Log_Pos: 4
               Relay_Log_File: relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File:
             Slave_IO_Running: Connecting     说明没有开启连接
            Slave_SQL_Running: Yes



真对以上问题:网上文章大都只是指出了可能的三种错误:

1. 网络不通
2. 密码不对
3. pos不对
我测试网络是可以ping通的。密码也对,pos也对。
后来想了很久,突然想起来了防火墙好像没有关闭!一检查果然。
所以第四种错误是:
4. 防火墙没有关闭。
相关命令如下:
关闭命令:  service iptables stop
永久关闭防火墙:chkconfig iptables off

两个命令同时运行,运行完成后查看防火墙关闭状态
service iptables status

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.211.133
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000003
          Read_Master_Log_Pos: 1218
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 254
        Relay_Master_Log_File: master-bin.000003
             Slave_IO_Running: Yes
               Slave_SQL_Running: Yes




8、在主服务器上创建一个数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> CREATE DATABASE xiaoxiao;
Query OK, 1 row affected (0.01 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |             |
| mydb               |
| mysql              |
| performance_schema |
| test               |
| tests              |
| xiaoxiao           |
+--------------------+



主服务器创建一个xiaoxiao库。。


9、在从服务器上启动复制线程,测试hlbrc这个库是否同步成功


1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| MY                 |
| mydb               |
| mysql              |
| performance_schema |
| test               |
| tests              |
| xiaoxiao           |
+--------------------+





从服务器中出现xiaoxiao库,,,说明同步成功》》》》》》



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-54888-1-1.html 上篇帖子: InnoDB 锁与隔离级别 下篇帖子: MYSQL INNODB索引 mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表