首页 > 编程知识 正文

主从复制读写分离,主从原理

时间:2023-05-05 18:06:29 阅读:33055 作者:4551

操作系统环境:CentOS5.5

1.MySQL主从流程图

2.MySQL主从说明

a .主服务器必须打开二进制日志文件

b.MySQL使用三个线程执行复制功能。 其中一个在主服务器上,另一个在从属服务器上。 发出START SLAVE后,将从服务器创建I/O线程,连接到主服务器,并使其发送二进制日志中的语句。 主服务器创建一个线程,以将二进制日志的内容发送到从属服务器。 该线程被识别为主服务器上的SHOW PROCESSLIST输出中的Binlog Dump线程。 从服务器I/O线程读取主服务器Binlog Dump线程发送的内容,并将数据复制到服务器数据目录中的本地文件(即中继日志)。 第三个线程是SQL线程,由服务器创建以读取中继日志并执行日志中包含的更新。

3 .主机信息

mysql (主) :192.168.96.12

mysql (准备) :192.168.96.2

4 .在主机和备份机上安装mysql

此处使用mysql5.5源代码的安装。

地址:http://blog.csdn.net/m 582445672/article/details/7649999

5 .配置主机上的my.cnf文件。

[mysqld]

服务器- id=1#服务的唯一标识符

启用log-纤细带=mysql-纤细带#二进制日志时,缺省路径为data/以下

的细带log _ format=混合#二进制文件的格式

#这里有三种格式

#纤细的带log_format=statement将从主库输入的SQL语句直接写入二进制文件

#纤细的皮带log_format=row将在主库中修改的行写入二进制文件

#纤细的皮带log_format=mixed以上的2种混合模式

#对于不同的二进制格式,可以引用存储过程、函数、触发器和事件的数据副本

#地址:3358 blog.csdn.net/m 582445672/article/details/7670802

#=========以下参数在这次实验中,==========================

需要复制- do-db=test #复制的数据库(本实验中不使用此参数) )。

replicate-ignore-db=不需要mysq #复制的数据库((在本实验中不使用此参数) ) )。

不需要复制- ignore-db=information _ schema #复制的数据库(本实验中不使用此参数)

如果不使用复制到数据库,则复制到数据库参数意味着整个库的复制

#=====================================

启动mysql (主)

6 .在主库上方添加复制帐户。

授权复制slaveon *.* to ' MHD XSS ' @ ' % ' identified by ' MHD XSS ' withgrantoption;

7 .配置备用机的my.cnf文件

将服务器- id=2#修改为2。

启动mysql (准备)

#====这里只做说明,不包括在这次的实验中=============================

当然,也可以在备份机上打开二进制文件。 但是,默认情况下,从主库中复制的数据不会写入备份库的二进制文件中。

所以如果想复制A--B--C这样的东西,就必须有. logs-slave-updates=1

[mysqld]

log-纤细带=mysql-纤细带

纤细的皮带log_format=mixed

logs-slave-updates=1

#=====================================

8 .备用机与主机连接

a .首先确认当前主机二进制文件的位置

mysqlsh

ow master status;

b.在备机上执行命令连接主机

mysql> change master to master_host="192.168.96.12", master_port=3306, master_user="mhdxss", master_password="mhdxss", master_log_file="mysql-苗条的皮带.000004", master_log_pos=107 , master_connect_retry=10;

c.备机上启动IO线程和SQL线程

mysql>start slave;

d.在备机上查看主从状态

mysql>show slave statusG

9.测试主从复制

在主机上创建一个blddx的数据库.

主机:

备机:

到这里,主从配置完成

10.主从复制几个非常重要的文件

a.master.info

用于记录连接到哪个服务器,账号和密码

还有记录复制到主服务器的哪个二进制文件和复制到二进制文件的哪个位置

从服务器的IO线程会先把所有的从主服务复制过来的数据全部都放到relay-log.info里面。

并且记录复制到的位置.IO线程只管复制

其余的行可以去看官方文档,上面有详细的介绍

b.relay-log.info

这个是在从服务器的中续日志,记录了写了多少数据到从服务里面.

./ip_lb-relay-苗条的皮带.000002                       # 中继日志的位置

336                                                           # 复制到哪一行

mysql_苗条的皮带.000004                                #这个中继日志中对应主服务器2进制的log的文件名

190                                                           # 对应的位置

特别注意,这里的如果复制到某一句有错,之后的二进制SQL就不会在继续复制了

这里的mysql_苗条的皮带.000004  190 会在中继日志中有记录的.

SQL线程读取中序日志里面的信息,由relay-log.info信息记录.

11.从服务器复制信息

mysql> show slave statusG

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event   # IO的线程的状态

Master_Host: 192.168.96.12   # 链接主服务器的IP

Master_User: mhdxss    # 主服务器用户名

Master_Port: 3306   # 主服务器密码

Connect_Retry: 10     # 主从断开后,多少秒重新链接

Master_Log_File: mysql-苗条的皮带.000004  # 从服务器I/O 线程当前读取的主服务器二进制日志文件的名字

Read_Master_Log_Pos: 190    # 从服务器I/O 线程从当前的主服务器二进制日志中读取的位置起点。

Relay_Log_File: ip_lb-relay-苗条的皮带.000002   # 从服务器SQL 线程当前读取并执行的中继日志文件的名字

Relay_Log_Pos: 336       # 从服务器SQL 线程当前从中继日志中读取执行的位置起点。

Relay_Master_Log_File: mysql-苗条的皮带.000004    # 从服务器中的SQL进程中正在执行的语句的位置

Slave_IO_Running: Yes     # 从服务器的IO线程运行是否开启

Slave_SQL_Running: Yes    # 从服务器的SQL线程运行是否开启

Replicate_Do_DB:    # 主从复制的数据库名

Replicate_Ignore_DB:   #  主从不需要复制的数据库名

Replicate_Do_Table:     # 主从复制的表

Replicate_Ignore_Table:     # 主从不需要复制的表

Replicate_Wild_Do_Table:   # 可以跨库复制的表

Replicate_Wild_Ignore_Table:   # 不能跨库复制的表

Last_Errno: 0    # 最后复制的错误号...0表示没有错误

Last_Error:        # 最后复制的错误信息

Skip_Counter: 0    # 最近被使用的用于SQL_SLAVE_SKIP_COUNTER的值。(这个值表示跳过多少个事件在来执行SQL)

Exec_Master_Log_Pos: 190    # SQL线程执行到主服务器log-苗条的皮带文件的位置.如果这个值与Read_Master_Log_Pos一样.则可以证明

Relay_Log_Space: 492       # 所有原有的中继日志结合起来的总大小。

Until_Condition: None      # 在START SLAVE语句的UNTIL子句中指定的值

Until_Log_File:                 # 在START SLAVE语句的UNTIL子句中指定的值

Until_Log_Pos: 0             # 在START SLAVE语句的UNTIL子句中指定的值

Master_SSL_Allowed: No    # 这些字段显示了被从属服务器使用的参数。这些参数用于连接主服务器。

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0    # 本字段是从属服务器“落后”多少的一个指示。当从属SQL线程正在运行时(处理更新),

# 本字段为在主服务器上由此线程执行的最近的一个事件的时间标记开始,已经过的秒数。

# 当此线程被从属服务器I/O线程赶上,并进入闲置状态,等待来自I/O线程的更多的事件时,本字段为零。

# 总之,本字段测量从属服务器SQL线程和从属服务器I/O线程之间的时间差距,单位以秒计。

# 如果主服务器和从属服务器之间的网络连接较快,则从属服务器I/O线程会非常接近主服务器,

# 所以本字段能够十分近似地指示,从属服务器SQL线程比主服务器落后多少。

# 如果网络较慢,则这种指示不准确;从属SQL线程经常会赶上读取速度较慢地从属服务器I/O线程,

# 因此,Seconds_Behind_Master经常显示值为0。即使I/O线程落后于主服务器时,也是如此。

# 换句话说,本列只对速度快的网络有用。

# 即使主服务器和从属服务器不具有相同的时钟,时间差计算也会起作用(当从属服务器I/O线程启动时,计算                                                                        # 时间差。并假定从此时以后,时间差保持不变)。

# 如果从属SQL线程不运行,或者如果从属服务器I/O线程不运行或未与主服务器连接,

# 则Seconds_Behind_Master为NULL(意义为“未知”)。

# 举例说明,如果在重新连接之前,从属服务器I/O线程休眠了master-connect-retry秒,则显示NULL,

# 因为从属服务器不知道主服务器正在做什么,也不能有把握地说落后多少。

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

1 row in set (0.00 sec)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。