MySQL主从复制配置

MySQL主从复制配置

1:设置mysql主从配置的优点:

  1.1、解决web应用系统,数据库出现的性能瓶颈,采用数据库集群的方式来实现查询负载;一个系统中数据库的查询操作比更新操作要多得多,通过多台查询服务器将 数据库的查询分担到不同的查询服务器上从而提高查询效率。

  1.2、Mysql数据库支持数据库的主从复制功能,使用主数据库进行数据的插入、删除与更新操作,而从数据库则专门用来进行数据查询操作,这样可以将更新操作和 查询操作分担到不同的数据库上,从而提高了查询效率。

2:主从配置的原理:

  主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。从服务器设置为复制主服务器的数据后,它连接主服务器并等待更新过程。如果主服务器失败,或者从服务器失去与主服务器之间的连接,从服务器保持定期尝试连接,直到它能够继续帧听更新。由--master-connect-retry选项控制重试间隔,默认为60秒。

每个从服务器跟踪复制时间。主服务器不知道有多少个从服务器或在某一时刻有哪些被更新了。

3MySql复制的基本过程:

  3.1、Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容; 3.2、Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO线程根据请求信息读取指定日志指定位置之后的日志信息,

返回给 Slave 端的 IO线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 BinaryLog 中的位置;

  3.3、 Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的RelayLog文件(mysql-relay-lin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到 master-info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;

  3.4、Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave端执行了同样的 Query,所以两端的数据是完全一样的。

 

4:实现主从配置过程:

  4.1、修改MySQL主服务器master

#vi /etc/my.cnf [mysqld]
log-bin = mysql-bin #[必须]启用二进制日志 
server-id = 150 #[必须]服务器唯一ID,默认是1,一般取IP最后一段
#选填参数
read-only = 0 #主机,读写都可以 
binlog-do-db = test #需要备份数据,多个写多行
binlog-ignore-db =mysql #不需要备份的数据库,多个写多行 
expire_logs_days = 2 # 自动清理 2 天前的log文件,可根据需要修改

  通过show master status;查看主服务器配的状态

  4.2、修改MySQL从服务器

#vi /etc/my.cnf [mysqld]
log-bin = mysql-bin #[必须]启用二进制日志 server-id = 47 #[必须]服务器唯一ID,默认是1,一般取IP最后一段
#选填参数
master-host = 192.168.50.150
master-user = root 
master-pass = root
master-port = 3306
master-connect-retry = 60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒) 
replicate-do-db = test #只复制某个库
replicate-ignore-db = mysql #不复制某个库

  

  4.3、重启两台服务器的

/etc/init.d/mysql restart

  4.4、在MySQL主服务器上建立帐户并授权slave:

/usr/local/mysql/bin/mysql -uroot -p
mysql>GRANT REPLICATION SLAVE ON *.* to ‘master用户名'@'%' identified by 'master密码'; #一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.50.150,加强安全。

4.5、登录MySQL主服务器,查询master的状态

mysql>show master status; 
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000004 | 308 | | |
+——————+———-+————–+——————+ 1 
row in set (0.00 sec)

  注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

  4.6、配置MySQL从服务器Slave

mysql>change master to master_host ='masterIP', master_user='master用户名', master_password='master密码', master_log_file='mysql-bin.000004',master_log_pos=308;

  注意不要断开,master_log_pos“308”无单引号且与主服务器Position对应。master_log_file与主服务器File对应

  关闭主从 stop slave;

  Mysql>start slave; //启动从服务器复制功能

  4.7、检查MySQL从服务器复制功能状态:

mysql> show slave statusG

*************************** 1. row **************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.50.150 //主服务器地址
Master_User: master用户名 //授权帐户名,尽量避免使用root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 600 //#同步读取二进制日志的位置,大于等于>=Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000003
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
……

  注:Slave_IOSlave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)

以上操作过程,主从服务器配置完成。

原文地址:https://www.cnblogs.com/wangxin-king/p/5806630.html