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-updates
replicate-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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用GTID配置Mysql主从的原理是将主库上的每个事务分配一个全局唯一的GTID,从库通过读取主库上的GTID来进行数据同步。具体步骤如下: 1. 在主库和从库上分别启用GTID功能,可以通过在my.cnf文件中添加以下参数来启用GTID: ``` server_id=1 enforce_gtid_consistency=1 log_bin=mysql-bin binlog_format=row ``` 其中,server_id是服务器ID,需要保证主库和从库的server_id不同;enforce_gtid_consistency参数用于开启GTID功能;log_bin参数指定Binlog文件名;binlog_format参数指定Binlog格式,必须为row格式。 2. 在主库上创建一个用于复制的用户,并为该用户赋予REPLICATION SLAVE权限,以便从库可以连接到主库并读取Binlog: ```sql CREATE USER 'replication'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'; ``` 3. 在主库上创建复制通道,并指定从库的地址和用户名密码: ```sql CHANGE MASTER TO MASTER_HOST='slave_host', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_AUTO_POSITION=1; ``` 其中,MASTER_HOST指定从库的地址;MASTER_USER和MASTER_PASSWORD指定从库连接所需的用户名和密码;MASTER_AUTO_POSITION参数指定使用GTID进行数据同步。 4. 在从库上启动复制进程,读取主库上的Binlog,并根据GTID进行数据同步: ```sql START SLAVE; ``` 从库会读取主库上的Binlog,并根据GTID进行数据同步,如果有新的事务产生,主库会为其分配一个新的GTID,并通知从库进行同步。如果出现异常情况,从库会根据GTID自动重新开始同步,确保数据的一致性。 需要注意的是,使用GTID进行数据同步时,主库和从库之间的版本必须相同,否则可能会出现数据不一致的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值