Linux学习笔记:MySQL主从同步

概括的讲,主从同步就是,从库先导入主库的某一个位置点的备份,然后根据主库的binlog日志再不停地通过增量执行增删改,达到与主库一致。

工作原理:

  1. Master开启binlog功能(日志功能);
  2. 把Master某个时间点的整库备份导入到Slave中,备份时最好使用master-data=1这个参数;
  3. 在Master上分配一个REPLICATION SLAVE的帐号用于同步;
  4. MASTER包含一个IO进程,SLAVE的MySQL包括了IO进程和SQL进程(但这两个进程没有关联);
  5. SLAVE发起复制请求并提供MASTER_LOG_FILE和MASTER_LOG_POS。
  6. MASTER的主进程通过验证后,把任务交给IO进程,并根据MASTER_LOG_FILE和MASTER_LOG_POS开始,不停的向SLAVE发送来自binlog的后续日志(主动推送);
  7. SLAVE的IO进程接收到这些日志后,存放到relay日志文件中,并在master.info文件中登记最新接收到的MASTER_LOG_FILE和MASTER_LOG_POS。
  8. SLAVE的SQL进程循环地从relay日志读取并执行,使SLAVE的库达到与MASTER库一致;

具体部署步骤

  1. 开启Master的binlog功能;

在my.cnf中,配置log-bin=路径+前缀;如

log-bin = /disk2/mysql_multi_instances/3308/mysql-bin

MySQL会在 /disk2/mysql_multi_instances/3308/这个目录下,生产binlog数据文件,前缀是mysql-bin,后缀是六位数字。

2.    备份Master数据库

[[email protected] ~]# mysqldump -uroot -p -h 127.0.0.1 -P 3308 -F -A -B -x --add-drop-database --events --master-data=1|gzip >3308.sql.gz

-F切割binlog(可选)

-A全部数据库

--add-drop-database 在CREATE DATABASE前插入DROP DATABASE,适合于整库备份的情况

-x锁表

-B可以指定多个DBNAME,但如果整库备份的话,也可以不指定,甚至不写

--events 导出时包含事件排程(event scheduler),如果不加,可能会有警告;总而言之可加可不加。

--master-data最最重要的参数,在导出的内容中插入

CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000101‘, MASTER_LOG_POS=3658;

这类语句,据说SLAVE可以根据这句自行判断MASTER_LOG_FILE和MASTER_LOG_POS,可是在我的测试中发现还是需要手工指定一下;anyway,设定这个参数你可以很容易查到FILE和POS,何乐而不为,这个参数有两个值1和2,1就是上面的效果,2就是把上面的效果注释掉作为参考。FILE和POS也可以在MASTER上查到

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000101 |     3658 |              |                  |
+------------------+----------+--------------+------------------+

3. Master上分配帐号用于同步

mysql> grant replication slave on *.* to [email protected]‘192.168.5.%‘ identified by ‘jet‘;

注意是 replication slave的权限(两个单词)

4. SLAVE把整库的备份文件导入库文件。

[[email protected] ~]# gzip -d 3308.sql.gz

[[email protected] ~]# mysql -uroot -p < 3308.sql

5. SLAVE上编写CHANGE MASTER语句

mysql> CHANGE MASTER TO

MASTER_HOST=‘192.168.5.103‘,

MASTER_USER=‘rep‘,

MASTER_PASSWORD=‘jet‘,

MASTER_PORT=3308,

MASTER_LOG_FILE=‘mysql-bin.000101‘,

MASTER_LOG_POS=107;

注意,这些资料必须严格核对。

7. SLAVE上执行slave start,然后查看状态

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.5.103
                  Master_User: rep
                  Master_Port: 3308
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000101
          Read_Master_Log_Pos: 3658
               Relay_Log_File: mysqld-relay-bin.000024
                Relay_Log_Pos: 252
        Relay_Master_Log_File: mysql-bin.000101
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          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: 3658
              Relay_Log_Space: 554
              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: 
1 row in set (0.00 sec)

其中最重要的是Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes,这两个都YES,才代表同步会话正确连接;在测试中,我在CHANGE MASTER语句中没有手工指定FILE和POS,启动slave后,只有Slave_IO_Running: Yes,而Slave_SQL_Running: No,这样的同步是有问题的,同时也会在状态界面上显示执行失败的SQL语句;后来我把slave stop,并重新指定FILE和POS,再slave start就正常了。

另外,也可以看到SLAVE上会多了master.info文件和relay日志文件

[[email protected] ~]# ll /var/lib/mysql/{master.info,mysqld-relay*}
-rw-rw----. 1 mysql mysql  73 Jan 24 22:12 /var/lib/mysql/master.info
-rw-rw----. 1 mysql mysql 302 Jan 24 22:12 /var/lib/mysql/mysqld-relay-bin.000023
-rw-rw----. 1 mysql mysql 252 Jan 24 22:12 /var/lib/mysql/mysqld-relay-bin.000024
-rw-rw----. 1 mysql mysql  52 Jan 24 22:12 /var/lib/mysql/mysqld-relay-bin.index

其实,那些relay日志文件也是binlog文件,可以用mysqlbinlog查看;而master.info文件则是文本文件,用于登记关于master的一些参数

[[email protected] ~]# less /var/lib/mysql/master.info

15

mysql-bin.000101

3658

192.168.5.103

rep

jet

3308

60

0

0

0

时间: 2024-11-05 03:29:33

Linux学习笔记:MySQL主从同步的相关文章

Linux环境中MySQL主从同步--添加新的从库

当前我认为数据库主从有两大应用价值: 1.从库相当于主库的备份.虽然数据库的主从并不能代替/取代备份,例如错误的数据可能毁掉所有的数据库,但主从也是在一种可读的状态下保持备份的一种实现方式. 2.从库可以缓解主库的压力,能提高性能.由于从库是只读的,因此在读取查询方面,从库可以代替主库,承担一定的压力,无论是这些压力是来自用户(应用程序)还是开发.运维自己. MySQL的主从其实并不困难,而且需要做的事情也并不多,mysql官方给出的文档中对主从也做出了详细的指导.说明和解释,但总共也多少篇幅.

Linux 下实现Mysql主从同步

一.实验环境准备: 主库(Master):CentOS release 5.9  x86_64 IP:10.45.172.40 mysql Ver 14.12 Distrib 5.0.95 从库CentOS release 5.9  x86_64 IP:10.45.172.37 mysql Ver 14.12 Distrib 5.0.95, 测试是否安装mysql:service mysql restart  或servicemysqld restart 安装mysql安装: 在官方网站下载以下

linux 学习笔记 mysql安装总结

1 安装方式 下载2禁制源码安装包 mysql-5.5.27-linux2.6-i686.tar.gz 备注:2禁制额包解压缩后直接就可以使用 不用Make 2 步骤 shell>groupadd mysql shell>useradd -d /home/mysql -m mysql -g mysql shell>cd /usr/local shell>mkdir mysql shell>cp /mnt/hgfs/Exchange \Data/MYSQL_Linux/mysq

linux学习笔记之线程同步机制

一.基础知识. 1:线程同步机制:互斥量,读写锁,条件变量,自旋锁,屏障. 1,互斥量:每个进程访问被互斥量保护的资源时,都需要先对互斥量进行判断. 1)互斥量重要属性:进程共享属性,健壮属性,类型属性. 2)部分系统 不支持 进程共享属性 3)对互斥量重复加锁会导致死锁. 2,读写锁. 1)读写锁有3种状态:读模式加锁,写模式加锁,未加锁. 1-写加锁模式:任何加锁都会被阻塞. 2-读加锁模式:读模式加锁的任何线程都可以得到访问权,同时添加一个读模式锁.但,写模式加锁会被阻塞. 3-在读模式下

MySQL主从同步、读写分离配置步骤、问题解决笔记

根据要求配置MySQL主从备份.读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记:       现在使用的两台服务器已经安装了MySQL,全是rpm包装的,能正常使用.       为了避免不必要的麻烦,主从服务器MySQL版本尽量保持一致; 环境:192.168.0.1 (Master)           192.168.0.2 (Slave) MySQL Version:Ver 14.14 Distrib 5.1.48, for pc-linux-gnu (i6

Linux下MySQL主从同步配置

Centos6.5 MySQL主从同步 MySQL版本5.6.25 主服务器:centos6.5 IP:192.168.1.101 从服务器:centos6.5 IP:192.168.1.102 一.主服务器相关配置 1.创建同步账户并指定服务器地址 [[email protected] ~]mysql -uroot -p mysql>use mysql mysql>grant replication slave on *.* to 'testuser'@'192.168.1.102' ide

MySQL主从同步机制与同步延时问题追查过程

前言 作为一名DBA,在工作中会经常遇到一些MySQL主从同步延迟的问题,这些同步慢的问题,其实原因非常多,可能是因为主从的网络问题导致,可能是因为网络带宽问题导致,可能是因为大事务导致,也可能是因为单线程复制导致的延迟. 今天遇到一个问题,Mysql持续报错,主从同步延时数过大或错误.所以这篇文章给大家分享下主从同步的机制原理以及问题排查思路. 故障表现 最直观的表现为: ? 1 2 3 4 5 6 7 mysql> show slave status\G;  // 状态一  Seconds_

windows下的mysql主从同步

mysql主从同步: 1.为什么要主从同步? 在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一.尤其是在大规模系统中,数据库集群已经成为必备的配置之一.集群的好处主要有:查询负载.数据库复制备份等.其中Master负责写操作的负载,也就是说一切写的操作都在Master上进行,而读的操作则分摊到Slave上进行.这样一来的可以大大提高读取的效率.写操作涉及到锁的问题,不管是行锁还是表锁还是块锁,都是比较降低系统执行效率的事情.我们这样的分离是把写操作集中在一个节点上,而读操作其其他

MySQL主从同步、读写分离配置步骤

现在使用的两台服务器已经安装了MySQL,全是rpm包装的,能正常使用. 为了避免不必要的麻烦,主从服务器MySQL版本尽量保持一致; 环境:192.168.0.1 (Master) 192.168.0.2 (Slave) MySQL Version:Ver 14.14 Distrib 5.1.48, for pc-linux-gnu (i686) using readline 5.1 1.登录Master服务器,修改my.cnf,添加如下内容: server-id = 1 //数据库ID号,

mysql 主从同步

第一章        安装mysql mysql安装包: MySQL-server-5.6.11-1.rhel5.x86_64.rpm MySQL-client-5.6.11-1.rhel5.x86_64.rpm 安装mysql: [[email protected] software]# rpm  -ivh MySQL-server-5.6.11-1.rhel5.x86_64.rpm Preparing...                 ##########################