Mysql的Master与Slave基本原理及配置

时间:2021-03-19 00:01:00
=============================基本原理=============================

Mysql的Master与Slave基本原理及配置

   Mysql的复制(replication)是一个异步的复制,从一个Mysql instace(称之为Master)复制到另一个Mysql instance(称之Slave)。实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(Sql进程和IO进程),另外一个进程在 Master(IO进程)上。
   要实施复制,首先必须打开Master端的binary log(bin-log)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。
复制的基本过程如下:
(1)Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
(2)Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;
(3)Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的高速Master"我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我";
(4)Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。

=============================配置============================= 一、准备工作: 
1.保证Master/Slave两台主机上mysql的版本一致(下面的配置是在MySQL5.5下完成的)。 
2.保证Master/Slave能够互相ping通,能够通信。 
Master主机IP : 192.168.0.80
Slave主机IP  : 192.168.0.114

二、配置Master/Slave上面的my.ini文件 

■Master  在[mysqld]下添加: 

server-id       = 1           #Master主标服务标识号,必需唯一
log-bin = mysql-bin #因为MYSQL是基于二进制的日志来做同步的,这个选项是必须的
binlog-do-db = db_user #要同步的库名
binlog-do-db = db_topic
binlog-ignore-db= mysql,information_schema,performance_schema,phpmyadmin
■Slave 在[mysqld]下添加: 
server-id        = 2           #Slave主标服务标识号,必需唯一log-bin          = mysql-bin   log-slave-updatesreplicate-do-db  = test        #要同步的数据库

配置完成后重启Master Slave

三、在Master上面执行 

■授予Slave机访问Master的权限
mysql>grant replication slave,reload,super,select on *.* to root@'192.168.0.114' identified by 'rootadmin';
mysql>flush privileges;

■查看Master的状态

mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 3350
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql,information_schema,performance_schema,phpmyadmin
1 row in set (0.00 sec)

※记下File和Position的值,用于之后对Slave的配置。

四、配置Slave

mysql>stop slave;       停止Slave
mysql> change master to
-> master_host = '192.168.0.80',
-> master_user = 'root',
-> master_password = 'rootadmin',
-> master_port = 3306,
-> master_log_file = 'mysql-bin.000001',
-> master_log_pos = 3350;
mysql> start slave; #开始同步

五、检测Slave的状态

mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.80
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 4439
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 1342
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4439
Relay_Log_Space: 1499
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
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
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)
#最重要的三个字段为以下值时成功了
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

摘自:
http://linuxme.blog.51cto.com/1850814/383742/
http://coffeant.diandian.com/post/2010-08-17/15235348