MySQL复制概述

MySQL数据库支持同步复制、单向、异步复制,在复制的过程中一个服务器充当主服务,而一个或多个服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

注意:当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

MySQL数据复制的原理[3个进程]

MySQL复制基于主服务器在二进制日志【binlog】中跟踪所有对数据库的更改(更新、删除等)。因此,复制必须在主服务器上启用二进制日志,每个从服务器从主服务器接收主服务器已经记录到其二进制日志【relaylog】的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。

Linux下的Mysql服务器主备的实现

[主服务器:192.168.25.136]    [从服务器:192.168.25.144]

在主服务器136上查看主状态以最新的服务器状态为准,在从服务器配置

mysql -uroot -proot
show master status\G

第一行表明 当前正在记录的 binarylog文件名是: mysql-bin.000001.

第二行,810 表示当前的文件偏移量, 就是写入在mysql-bin.000001 文件的记录位置。

第三行和第四行,表示需要记录的数据库和需要忽略的数据库。 只有需要记录的数据库,其变化才会被写入到mysql-bin.000001日志文件中。

注意:如果显示"Empty Set",则需要检查是否开启了bin文件(小规模文件my-small.cnf默认不开启,本博客的mysql配置以small为准,因此需修改)

sed -i 's/#log-bin=mysql-bin/log-bin=mysql-bin/g' /etc/my.cnf

在主服务器136上面创建专门用于备份的用户double

GRANT REPLICATION SLAVE ON *.* TO 'double'@'192.168.25.144' IDENTIFIED BY 'double';

开启主服务器136的 binarylog

vim /etc/my.cnf

# 添加如下内容
binlog_format=mixed
binlog-ignore-db=mysql
auto-increment-offset=1
auto-increment-increment=3
注:binlog-ignore-db 表示,需要忽略哪些数据库。我这里忽略了其他的4个数据库。
假设需要将来可能需要3台服务器做备份, 所以auto-increment-increment 设为3. 而 auto-increment-offset=1 表示这台服务器的序号从1开始, 不超过auto-increment-increment。这样做之后, 我在这台服务器上插入的第一个id就是 1, 第二行的id就是 4了, 而不是2.

重启136服务器的mysql服务

service mysqld restart
==>/etc/inint.d/mysqld restart

获取主服务器136状态

如果是全新安装的, 那么不需要同步初态,直接跳过这一步,到后面直接查看主服务器状态。

如果已经有了一个数据库ftl数据库作为初态。

先锁定 hello数据库:  flush tables with read lock;
然后导出数据: mysqldump -uroot -proot ftl -B -x> /tmp/ftl.sql
查看A服务器的binary日志位置 show master status\G 记住这个文件名和 位置, 等会在从服务器上会用到
解除锁定了 unlock tables;

设置从服务器 144需要复制的数据库

修改从服务器的server_id

 sed -i 's/server-id.*1/server-id       = 2/g' /etc/my.cnf

修改: vim /etc/my.cnf

# 添加如下内容
relay-log = relay-log
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

注:replicate-ignore-db 复制时需要排除的数据库。除开系统的几个数据库之外,所有的数据库都复制。

relay_log 中继日志的名字。 前面说到了, 复制线程需要先把远程的变化拷贝到这个中继日志中, 再执行。
log-slave-updates 意思是,中继日志执行之后,这些变化是否需要计入自己的binarylog。 当你的B服务器需要作为另外一个服务器的主服务器的时候需要打开。  就是双主互相备份,或者多主循环备份。 我们这里需要, 所以打开。

重启144服务器的mysql服务

service mysqld restart
==>/etc/inint.d/mysqld restart

查看从服务器的server_id

mysql -uroot -proot
SHOW VARIABLES LIKE 'server_id'; # 显示跟配置一致即可,前面我们设置2

 从服务器测试主服务器的注册的double用户是否正常

mysql -h 192.168.2.144 -udouble -pdouble

在从服务器144上导入主服务器136的初态

scp root@192.168.25.144: /tmp/ftl.sql  /tmp/ftl.sql
mysql -uroot -proot < /tmp/ftl.sql [没有添加库名,是因为备份的时候使用了-B,里面还有自动建库的语句]

开启同步, 在从服务器144服务器上执行

CHANGE MASTER TO
MASTER_HOST='192.168.25.136', # 主服务器IP
MASTER_USER='double',
MASTER_PASSWORD='double', # 主服务器设置的用户
MASTER_LOG_FILE='mysql-bin.000001', # 根据主服务器看 : show master status\G 里面的 File
MASTER_LOG_POS=2702; # 根据主服务器查看; show master status\G 里面的 Position

从服务器重启mysql服务, 然后查看slave线程是否正常

上面几个参数要跟上面的保持一致,而且IP尽量用补全,除非在局域网环境,多台备份服务器

如果其中一个是No, 那就说明不成功。需要查看mysql的错误日志[/usr/local/mysql/data/*.err]

密码,防火墙,ip地址不对等都会导致失败,查看日志文件即可

主从复制结果

在主服务器的ftl数据库的user表中 连续插入了3条数据, 查看从服务器是否同步数据了

Linux下的Mysql的主从备份的更多相关文章

  1. Linux下实现MySQL数据库定时备份

    咳~ 咳~ 为了避免数据操作失误.数据丢失.甚至删库跑路,简单做个数据备份吧 1.创建备份目录 # 习惯放在 local 下 cd /usr/local/ # 创建备份目录 mkdir backup ...

  2. Linux下实现MySQL数据库自动备份

    1.给mysql创建用户备份的角色,并且授予角色SELECT, RELOAD, SHOW DATABASES, LOCK TABLES等权限. mysql> create user 'backu ...

  3. Linux下的MySQL主从同步

    网上一些关于Linux下的MySQL主从同步教程非常之多,有些很简单的配置却弄的非常复杂,有些根本无法配通,下面是我通过简单的配置完成的主从同步过程,大家可以参考,此文章更适用于新手. 一.测试环境: ...

  4. Linux下实现mysql数据库每天自动备份

    Linux下实现mysql数据库每天自动备份 1.基本操作步骤 a.创建备份目录 mkdir -m 777 /home/wwwroot/backup b.创建备份脚本sh vim /home/wwwr ...

  5. windows与linux中的mysql配置主从

    最近在给学生讲解数据库的主从配置,由于学生电脑里面装的虚拟机是linux的,但是本机的系统是windows的,所以需要用windows中的mysql与linux中的mysql进行主从配置.下面说一下主 ...

  6. windows下数据库文件使用脚本同步到linux下的mysql数据库中

    1.背景 windows server 2008 下 每天会有 *.sql数据文件 需要上传到linux 中的mysql数据库中 而运维人员是在 windows server 下使用 xshell 连 ...

  7. Linux下安装mysql(1)(CentOS)

    标题是(1)也就是说这次是基础安装,这种方式安装,没有组的创建,权限管理,配置文件更改等,仅仅是最基本的安装,适合第一次在linux上安装mysql的新手 1.准备好安装包(Linux-Generic ...

  8. Linux下安装mysql教程

    Linux下安装mysql  MySQL官网:https://dev.mysql.com/downloads/mysql/ 到mysql官网下载mysql编译好的二进制安装包,在下载页面Select ...

  9. linux下配置mysql默认编码utf8

    linux下配置mysql默认编码utf8 下面是需要在对应地方加入的配置 [client] default-character-set=utf8 [mysqld] character-set-ser ...

随机推荐

  1. python-UDP传输模型

    #!/usr/bin/python #coding=utf-8 #服务器端 from socket import * from time import ctime HOST="192.168 ...

  2. Objekt Orientierte Programmierung C++

    1.Funtion Overloading C++ erlaubt,dass einige Funktion gleiches Names deklariert wird.Der Formale Pa ...

  3. c#删除list中的元素

    public static void TestRemove() { string[] str = { "1", "2", "d", &quo ...

  4. [转]Creating an OData v3 Endpoint with Web API 2

    本文转自:https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata- ...

  5. C# 扩展方法一

    1. 何为扩展方法 扩展方法是C#3.0引入的语法特性,是一种特殊的静态方法.它使得我们能向现有的数据类型“动态”添加方法,而不需要创建行的派生类型.重新编译或直接修改原始类型的源代码. 注意扩展方法 ...

  6. 如何应用ASP.NET MVC中的分部视图

    概述: 在ASP.NET Web Form的开发经验中,对于User Control使用比较频繁,可以减少重复的代码,利于页面模块化,这个概念也被引入了ASP.NET MVC.即“分部视图”. 1.创 ...

  7. 京东-Java开发工程师-一面

    时间:2017-4-7 16:47 时长:32分19秒 类型:笔试前电话面试 之前打过一个电话过来说了一声,下午就直接打过来面试了,没有自我介绍貌似 1. 你做的这些东西是什么样的? 2. 选一个你觉 ...

  8. 面向对象(基础oop)之结构与数组高级

    大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...

  9. [linux] C语言Linux系统编程-做成守护进程

    守护进程: 必须是init进程的子进程,运行在后台,不与任何控制终端相关联. 通过以下步骤成为守护进程 1.调用fork()创建出来一个新的进程,这个新进程会是将来的守护进程 2.在新守护进程的父进程 ...

  10. 九、双端队列LinkedBlockDeque

    一.简介 JDK通过BlockQueue阻塞队列实现了生产者-消费者模式,生产者向队列添加数据,消费者从队列里面消费数据. 但是在有些场景里面,我们是无法区分生产者消费者的,或者说既是生产者,也是消费 ...