实现MySQL主从复制、双主模型的简单案例



写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正。如有不明白的地方,愿可一起探讨。



MySQL复制的基本原理



MySQL复制解决的基本问题

让一台MySQL服务器的数据与其他MySQL服务器的数据保持同步。

MySQL复制的工作原理

MySQL复制的工作原理图如下所示(图来自高性能MySQL第3版)

MySQL主从复制的基本步骤:

1、启动主库上的二进制文件,并把数据更改记录到二进制日志中;

2、备库将主库上的二进制日志复制到自身的中继日志中;

3、备库读取自身的中继日志中的事件,将其重放到备库数据之上。

案例拓扑图



主从复制

双主模型

前提:在Master和Slave两台主机上安装了mariadb-5.5.36

安装mariadb-5.5.36



创建数据库相关文件所存放的目录

# mkdir -pv /mysql/data
# mkdir /mysql/binlogs
# mkdir /mysql/relaylogs

创建数据运行时的用户和用户组

# groupadd -r mysql
# useradd -g mysql -s /sbin/nologin -M -d /mysql/data/ -r mysql

修改存放数据库相关文件目录的权限

# chown -R mysql:mysql /mysql/*

编译安装maridb-5.5.36

# tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local/
# cd /usr/local/
# ln -sv mariadb-5.5.36-linux-x86_64/ mysql
# cd mysql/
# chown -R root:mysql ./*
# mkdir /etc/mysql
# cp support-files/my-large.cnf /etc/mysql/my.cnf
# vim /etc/mysql/my.cnf 
    datadir=/mysql/data
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on
# vim /etc/man.config 
    MANPATH /usr/local/mysql/man
# ln -sv /usr/local/mysql/include/ /usr/include/mysql
# echo "/usr/local/mysql/lib/" > /etc/ld.so.conf.d/mysql.conf
# ldconfig
# vim /etc/profile.d/mysql.sh
    export PATH=/usr/local/mysql/bin:$PATH
# source /etc/profile.d/mysql.sh
# scripts/mysql_install_db --user=mysql --datadir=/mysql/data/
# /etc/rc.d/init.d/mysqld start

配置主从复制

配置Master服务器



配置基本过程:

1、启用二进制日志

2、定义server-id

3、创建有复制权限的账号

编辑配置文件,启动二进制日志和定义server-id

[[email protected] ~]# vim /etc/mysql/my.cnf
log-bin=/mysql/binlogs/master-bin
server-id       = 1

创建有复制权限的账号

[[email protected] ~]# mysql
MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO [email protected]‘10.170.%.%‘ IDENTIFIED BY ‘[email protected]‘;
MariaDB [(none)]> FLUSH PRIVILEGES;

配置Slave服务器



配置基本过程:

1、关闭二进制日志,启动中继日志

2、定义server-id

3、使用有复制权限的账号连接Master服务器

4、启动I/O线程和SQL线程

编辑配置文件,启动中继日志功能和定义server-id

[[email protected] ~]# vim /etc/mysql/my.cnf 
#log-bin=mysql-bin
relay-log= /mysql/relaylogs/relay-log
server-id       = 11

查看主节点的状态信息

MariaDB [(none)]> SHOW MASTER STATUS;

+-------------------+----------+--------------+------------------+

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| master-bin.000001 |      495 |              |                  |

+-------------------+----------+--------------+------------------+

1 row in set (0.07 sec)

使用有复制权限的账号连接Master服务器

[[email protected] ~]# mysql

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST=‘10.170.2.36‘, MASTER_USER=‘repluser‘, MASTER_PASSWORD=‘[email protected]‘, MASTER_LOG_FILE=‘master-bin.000001‘, MASTER_LOG_POS=495;

启动I/O线程和SQL线程

MariaDB [(none)]> START SLAVE;

测试主从复制



在Master服务器上添加数据库

# mysql < mydb.sql

# mysql < hellodb.sql

查看Master服务器上的数据库

[[email protected] ~]# mysql

MariaDB [(none)]> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| hellodb            |

| mydb               |

| mysql              |

| performance_schema |

| test               |

+--------------------+

6 rows in set (0.05 sec)

在Slave服务器上查看数据库

[[email protected] ~]# mysql

MariaDB [(none)]> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| hellodb            |

| mydb               |

| mysql              |

| performance_schema |

| test               |

+--------------------+

6 rows in set (0.00 sec)

配置双主模型

准备工作



将所已经安装MariaDB数据库的两台主机还原到刚安装完的状态

具体过程:

1、停止MySQL服务;

2、删除/mysql/data/、/mysql/binlogs/、/mysql/relaylogs/目录下的所有数据;

3、初始化MySQL并启动MySQL服务。

配置Master1和Master2服务器



基本配置要求:

1、Master1和Master2都得创建具有复制权限的账号;

2、Master1和Master2都得启动中继日志和二进制日志;

3、为了保证具有自动增长功能的字段能正确生成ID,需要配置Master1和Master2分别使用偶数和奇数ID号;

4、Master1和Master2都要将对方配置为自己的主节点。

配置Master1服务器

编辑配置文件

[[email protected] ~]# vim /etc/mysql/my.cnf

log-bin=/mysql/data/master1-bin

relay-log=/mysql/relaylogs/relay1-bin

auto-increment-increment = 2

auto-increment-offset = 1

server-id = 1

重启MySQL服务

# /etc/init.d/mysqld restart

创建具有复制权限的账号

[[email protected] ~]# mysql

MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO [email protected]‘10.170.%.%‘ IDENTIFIED BY ‘[email protected]‘;

查看Master2的状态信息

MariaDB [(none)]> SHOW MASTER STATUS;

+--------------------+----------+--------------+------------------+

| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+--------------------+----------+--------------+------------------+

| master2-bin.000001 |      425 |              |                  |

+--------------------+----------+--------------+------------------+

连接到Master2

MariaDB [(none)]>  CHANGE MASTER TO MASTER_HOST=‘10.170.2.49‘, MASTER_USER=‘repluser‘, MASTER_PASSWORD=‘[email protected]‘, MASTER_LOG_FILE=‘master2-bin.000001‘, MASTER_LOG_POS=425;

启动I/O线程和SQL线程

MariaDB [(none)]> START SLAVE;

配置Master2服务器

编辑配置文件

[[email protected] ~]# vim /etc/mysql/my.cnf

log-bin=/mysql/data/master2-bin

relay-log=/mysql/relaylogs/relay2-bin

auto-increment-increment = 2

auto-increment-offset = 2

server-id = 11

重启MySQL服务

# /etc/init.d/mysqld restart

创建具有复制权限的账号

[[email protected] ~]# mysql

MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO [email protected]‘10.170.%.%‘ IDENTIFIED BY ‘[email protected]‘;

查看Master1的状态信息

MariaDB [(none)]> SHOW MASTER STATUS;

+--------------------+----------+--------------+------------------+

| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+--------------------+----------+--------------+------------------+

| master1-bin.000001 |      425 |              |                  |

+--------------------+----------+--------------+------------------+

连接到Master1

MariaDB [(none)]>  CHANGE MASTER TO MASTER_HOST=‘10.170.2.36‘, MASTER_USER=‘repluser‘, MASTER_PASSWORD=‘[email protected]‘, MASTER_LOG_FILE=‘master1-bin.000001‘, MASTER_LOG_POS=425;

启动I/O线程和SQL线程

MariaDB [(none)]> START SLAVE;

测试双主模型



Master1服务器上添加hellodb.sql 数据库

mys[[email protected] ~]# mysql < hellodb.sql

Master2服务器上,查看数据库

[[email protected] ~]# mysql

MariaDB [(none)]> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| hellodb            |

| mysql              |

| performance_schema |

| test               |

+--------------------+

5 rows in set (0.01 sec)

Master2服务器上添加mydb.sql数据库

[[email protected] ~]# mysql < mydb.sql

Master1服务器上,查看数据库

[[email protected] ~]# mysql

MariaDB [(none)]> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| hellodb            |

| mydb               |

| mysql              |

| performance_schema |

| test               |

+--------------------+

6 rows in set (0.05 sec)

说明:在整个配置过程中,本文将Master服务器作为Master1服务器使用,将Slave服务器作为Master2服务器使用。

时间: 2024-10-26 16:45:16

实现MySQL主从复制、双主模型的简单案例的相关文章

mysql 主从复制+双主复制

我们在使用MySQL Server数据库时,可能会遇到这种问题,如果其中一台mysql数据库宕掉后,我们希望以最短的时间进行解决,并尽快使用数据库,但是如果遇到一些无法快速修复的故障时,该怎么办呢? 我们可以设想,如果这是有另外一台和这个数据库一模一样的数据库时,问题就不一样了,怎么才可以实现实时,并自动的备份或者复制呢?   Mysql的主从复制: 1.主机安装好mysql服务后,首先修改my.cnf文件,添加两行,其中server id确保唯一 2.备机修改my.cnf 3.两台mysql重

Mysql的双主架构

双主模型架构:两台双主都有二进制日志和中继日志.都要有dump线程,io线程,sql线程. io线程:负责从其他节点请求二进制日志事件. dump线程:从本地的二进制日志读取事件. sql线程:从中继日志中读取事件保存在本地数据库中,并写入二进制日志. 配置实现双主模型: 1)双方节点具有复制权限的用户 2)双方节点都得启用中继日志和需要配置二进制日志 3)为保证具有自动增长功能的字段能正确生成id,需要配置两个节点分别使用偶数或奇数. 本次实验使用两台服务器两节点分别node1:192.168

双主模型、SSL、percona-toolkit、MySQL复制概念深入

[减轻复制压力]复制过滤器,指定需要复制的白名单,或者需要忽略的黑名单 [[email protected] ~]# cd /etc/ [[email protected] etc]# cp my.cnf{,.master} [[email protected] etc]# ll my.cnf* -rw-r--r--. 1 root root 4686 10月 13 04:43 my.cnf -rw-r--r--. 1 root root 4686 10月 14 20:00 my.cnf.mas

Mysql 5.6.27 双主模型&&主备模型安装测试

http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-5.6.27-1.el6.x86_64.rpm-bundle.tar 测试环境:    两台服务器          MYSQL-1:10.11.22.78          MYSQL-2:10.11.22.248    测试系统          Centos 6.5_64    Mysql版本          MySQL-5.6.27    Keepalived版本          k

基于heartbeat v1配置mysql和httpd的高可用双主模型

一.配置高可用集群的前提:(以两节点的heartbeat为例) ⑴时间必须保持同步 ⑵节点之间必须用名称互相通信 建议使用/etc/hosts,而不要用DNS 集群中使用的主机名为`uname -n`表示的主机名: ⑶ping node(仅偶数节点才需要) ⑷ssh密钥认证进行无障碍通信: 二.heartbeat v1的配置 程序主配置文件:ha.cf 认证密钥:authkeys, 其权限必须为组和其它无权访问: 资源配置文件:haresources /usr/share/doc/heartbe

MaridDB主从复制,双主模型,半同步的配置

一.主从复制 MariaDB是将客户端上传的数据从主节点复制一份到从节点,从而可以提高读性能,而这种方式并不能提升写性能,因为每一份数据都会在从节点上写一份 缺点:为了增加读写性能,数据库都是将数据 先存入内存中,随后同步到数据文件中,也就是磁盘上,两者同步是异步同步,也就是说,从节点上的数据是落后于主节点的 复制过程: 客户端写入数据---->主服务器的事务日志内存---->事物日志文件---->同步到数据文件---->通过二进制文件---从服务器的IO线程---->中继日

MySQL keepalived 双主.md

MySQL keepalived 双主搭建 环境说明 系统 IP 主机名 mysql keepalived VIP CentOS 6.8 192.168.197.61 C6-node1 5.6.36 1.2.13 192.168.197.88 CentOS 6.8 192.168.197.62 C6-node2 5.6.36 1.2.13 192.168.197.88 安装MySQL双主 C6-node1 MySQL的安装及初始化这里不做详细介绍,下面贴出node1的my.cnf的配置文件: [

【 Linux 】Keepalived实现双主模型高可用集群

要求:    1. 两台web服务器安装wordpress,数据库通过nfs共享    2. 使用keepalived实现双主模型 环境:    主机:        系统:CentOS6.7 x64        1. node1: 192.168.2.11  node2: 192.168.2.12 vip: 192.168.2.200        service iptables stop        selinux: disabled 一.两台主机分别配置lamp架构,并使用nfs实现

Mogilefs分布式文件系统-Keepalived+Nginx双主模型实现图片分布式存储、访问

一.分布式文件系统: 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.计算机通过文件系统管理.存储数据,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量的方式,在容量大小.容量增长速度.数据备份.数据安全等方面的表现都差强人意. 分布式文件系统可以有效解决数据的存储和管理难题:将固定于某个地点的某个文件系统,扩展到任意多个地点/多个文件系统,众多的节点组成一个文件系统网络.每个节点可以分布在