环境:

系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡)

系统版本:CentOS-7-x86_64-Minimal-1611.iso

数据库版本信息 : 10.1.20-MariaDB Source distribution

主服务器的IP:192.168.1.14

从服务器的IP:192.168.1.15

从服务器的IP:192.168.1.16

步骤:

1.准备

三台服务器安装好MariaDB

(安装办法可以参考http://www.cnblogs.com/vicowong/p/5024792.html,第二部分 2.安装mariadb)

2.主服务器设置

2.1.修改主机名称

[root@centos ~]# hostnamectl --static set-hostname dbmaster

[root@centos ~]# systemctl restart network

2.2 修改IP地址

[root@centos ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16780032

找到BOOTPROTO,并且修改(设为静态网址)

BOOTPROTO="static"

在最后添加三行内容(添加本机IP,子网掩码,网关)

IPADDR="192.168.1.14"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"

:wq 保存退出

2.3 重启

[root@centos ~]# shutdown -r now

2.4 配置主数据库

[root@dbmaster ~]# vim /etc/my.cnf

查找 log-bin=mysql-bin 行,确保此行生效,并且增加以下内容

log-bin=mysql-bin

log-bin-index = mysql-bin.index

查找 Server-id行,设置好ID(这里设置为1014,可以随意设置,只要唯一即可)

server-id   = 1014

:wq 保存退出

重启数据库服务,查看是否正常运行

[root@dbmaster ~]# systemctl restart mysql

[root@dbmaster ~]# systemctl status mysql -l

2.5 添加主从同步用户

[root@dbmaster ~]#  mysql -u root -p

输入密码,进入数据库命令行。主服务器上建立同步帐号 (运行环境不要将密码设置过于简单)

MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456';

MariaDB [(none)]> FLUSH PRIVILEGES;

增加三个测试数据库 t1 t2 t3

MariaDB [(none)]> show databases;

MariaDB [(none)]> create database t1;

MariaDB [(none)]> create database t2;

MariaDB [(none)]> create database t3;

MariaDB [(none)]> show databases;

查看主服务器状态

MariaDB [(none)]> show master status;

+------------------+----------+--------------+------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000027 | 460   |        |          |
+------------------+----------+--------------+------------------+

3.从服务器01设置

3.1.修改主机名称

[root@centos ~]# hostnamectl --static set-hostname dbslave01

[root@centos ~]# systemctl restart network

3.2 修改IP地址

[root@centos ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16780032

找到BOOTPROTO,并且修改(设为静态网址)

BOOTPROTO="static"

在最后添加三行内容(添加本机IP,子网掩码,网关)

IPADDR="192.168.1.15"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"

:wq 保存退出

3.3 重启

[root@centos ~]# shutdown -r now

3.4 配置从数据库01

[root@dbslave01 ~]# vim /etc/my.cnf

查找 log-bin行,禁止日志文件生成

#log-bin=mysql-bin

查找以下 binlog_format=mixed ,在下面添加以下内容

relay-log = relay-log
relay-log-index = relay-log.index

查找 Server-id行,设置好ID(这里设置为1015,可以随意设置,只要唯一即可)

server-id   = 1015

在此行下,添加以下内容

replicate-wild-ignore-table=mysql.%
log-slave-updates
read-only = ON

:wq 保存退出

重启数据库服务,查看是否正常运行

[root@dbslave01 ~]# systemctl restart mysql

[root@dbslave01 ~]# systemctl status mysql -l

3.5 查看从数据库状态

[root@dbslave01 ~]#  mysql -u root -p

输入密码,进入数据库命令行。查看数据只否处于只读状态

MariaDB [(none)]> show global variables like 'read%';

+----------------------+---------+
| Variable_name | Value |
+----------------------+---------+
| read_buffer_size | 1048576 |
| read_only | ON |
| read_rnd_buffer_size | 4194304 |
+----------------------+---------+

*** 如有需要,可以临时设置数据库可写

MariaDB [(none)]> set global read_only=1; 

3.6 将主数据库的现有表,全部复制到从数据库

3.6.1 进入主数据库,如果需要可以为mysqldump增加软连接

[root@dbmaster ~]# ll /opt/mysql/bin/mysqldump

[root@dbmaster ~]# ln -s /opt/mysql/bin/mysqldump /bin

3.6.2 在主服务器生成一个快照版本(生成之后,不要再进行数据库改动,否则同步不上)

查看InnoDB所有的数据都同步到磁盘

[root@dbmaster ~] mysql -u root -p

MariaDB [(none)]> show engine innodb status;

[root@dbmaster ~] cd /data

如果只有INNODB,就用如下命令生成快照:

[root@dbmaster ~]# mysqldump -uroot -p --events --triggers --routines --flush-logs --master-data=2 --lock-all-tables --databases t1 t2 t3> dbbackup.sql

--single-transaction 这个参数只对innodb适用,实现热备InnoDB表;因此,不需要同时使用--lock-all-tables;
--databases 后面跟除mysql以后的其他所有数据库的库名 (测试库上只有 t1 t2 t3 三个库)
--master-data 参数会记录导出快照时候的mysql二进制日志位置,一会会用到。
--lock-all-tables 为所有表加读锁

*** 如果有MYISAM或者既有MYISAM又有INNODB,就用如下命令生成快照

mysqldump -uroot -p --events --triggers --routines --flush-logs --master-data=2 --lock-tables --databases test > dbbackup.sql

查看主服务器状态

[root@dbmaster ~]#  mysql -u root -p

MariaDB [(none)]> show master status;

+------------------+----------+--------------+------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000027 | 460   |        |          |
+------------------+----------+--------------+------------------+

3.6.3   将主数据库的快照版本还原到从服务器01上

[root@dbmaster ~]# scp /data/dbbackup.sql root@192.168.1.15:/data

3.6.4 打开从服务器01,查看是否已经上传成功

[root@dbslave01 ~]#  cd /data

[root@dbslave01 ~]#  ll

使用grep命令查找到二进制日志的名称以及位置(显示的信息,应该必须和主服务器当前的 show master status 的一致)

[root@dbslave01 ~]#  grep -i "change master" dbbackup.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000027', MASTER_LOG_POS=460;

[root@dbslave01 ~]#  mysql -u root -p

输入密码,进入数据库命令行。将主数据库快照恢复数据从数据库01中

[root@dbslave01 ~]#  show databases;

[root@dbslave01 ~]#  source /data/dbbackup.sql

[root@dbslave01 ~]#  show databases;

设置从服务器01,同步主服务器

[root@dbslave01 ~]#  change master to master_host='192.168.1.14',master_user='mysync',master_password='q123456',master_log_file='mysql-bin.000027',master_log_pos=460;

说明:

master_host 指定主服务器IP地址

master_user 主服务器专用于同步的用户名称(之前在主服务器上设置的)

master_password 主服务器专用于同步的用户密码

master_log_file 主服务器当前日志文件名称(必须对应)

master_log_pos 主服务器当前日志位置(必须对应)

启用从服务器01的同步
[root@dbslave01 ~]#  start slave;

查看状态
[root@dbslave01 ~]#  show slave status\G:

查看Slave_IO_Running和Slave_SQL_Running的状态,如果都为Yes,那么就成功了。

*** 如果设置错误,可以先停止同步状态,然后清空同步状态 ,再做一次

停止同步状态

[root@dbslave01 ~]#  stop slave;

清空同步状态(清空后,同步的日志名称、日志位置都会为空,要注意)

[root@dbslave01 ~]#  reset slave;

****************

4 测试主服务,从服务器01的数据库同步

4.1 打开主服务器

[root@dbmaster ~]#  mysql -u root -p

删除 t1 数据库,增加 t4 数据库

MariaDB [(none)]> show databases;

MariaDB [(none)]> drop database t1;

MariaDB [(none)]> create database t4;

MariaDB [(none)]> show databases;

查看主服务器状态(注意当前日志文件名称,日志位置)

MariaDB [(none)]> show master status;

4.2 打开从服务器

[root@dbslave01 ~]#  mysql -u root -p

查看从服务器01上的数据库

MariaDB [(none)]> show databases;

查看从服务器状态

MariaDB [(none)]> show slave status \G;

特别留意下面两行,是否对应主服务器当前的名称和位置 (另外需要注意,是否有额外错误行信息,如果一切正常,将不会有错误信息)

Master_Log_File: mysql-bin.000027

Read_Master_Log_Pos: 460

5.从服务器02设置

5.1.修改主机名称

[root@centos ~]# hostnamectl --static set-hostname dbslave02

[root@centos ~]# systemctl restart network

5.2 修改IP地址

[root@centos ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16780032

找到BOOTPROTO,并且修改(设为静态网址)

BOOTPROTO="static"

在最后添加三行内容(添加本机IP,子网掩码,网关)

IPADDR="192.168.1.16"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"

:wq 保存退出

5.3 重启

[root@centos ~]# shutdown -r now

5.4 配置从数据库02

[root@dbslave02 ~]# vim /etc/my.cnf

查找 log-bin行,禁止日志文件生成

#log-bin=mysql-bin

查找以下 binlog_format=mixed ,在下面添加以下内容

relay-log = relay-log
relay-log-index = relay-log.index

查找 Server-id行,设置好ID(这里设置为1016,可以随意设置,只要唯一即可)

server-id   = 1016

在此行下,添加以下内容

replicate-wild-ignore-table=mysql.%
log-slave-updates
read-only = ON

:wq 保存退出

重启数据库服务,查看是否正常运行

[root@dbslave02 ~]# systemctl restart mysql

[root@dbslave02 ~]# systemctl status mysql -l

5.5 查看从数据库状态

[root@dbslave02 ~]#  mysql -u root -p

输入密码,进入数据库命令行。查看数据只否处于只读状态

MariaDB [(none)]> show global variables like 'read%';

+----------------------+---------+
| Variable_name | Value |
+----------------------+---------+
| read_buffer_size | 1048576 |
| read_only | ON |
| read_rnd_buffer_size | 4194304 |
+----------------------+---------+ 

5.6 将主数据库的现有表,全部复制到从数据库

5.6.1 删除原来备份(数据库有更改,必须重新生成快照备份)

[root@dbmaster ~] cd /data

[root@dbmaster ~] rm -rf dbbackup.sql

5.6.2 在主服务器生成一个快照版本(生成之后,不要再进行数据库改动,否则同步不上)

[root@dbmaster ~] mysql -u root -p

MariaDB [(none)]> show engine innodb status;

[root@dbmaster ~]# mysqldump -uroot -p --events --triggers --routines --flush-logs --master-data=2 -lock-all-tables --databases t2 t3 t4> dbbackup.sql

查看主服务器状态

[root@dbmaster ~]# mysql -u root -p

MariaDB [(none)]> show master status;

+------------------+----------+--------------+------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000029 | 382   |        |          |
+------------------+----------+--------------+------------------+

5.6.3   将主数据库的快照版本还原到从服务器02上

[root@dbmaster ~]# scp /data/dbbackup.sql root@192.168.1.16:/data

5.6.4 打开从服务器02,查看是否已经上传成功

[root@dbslave02 ~]#  cd /data

[root@dbslave02 ~]#  ll

使用grep命令查找到二进制日志的名称以及位置(显示信息,应该必须和主服务器当前的 show master status 的一致)

[root@dbslave02 ~]#  grep -i "change master" dbbackup.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000029', MASTER_LOG_POS=382;

[root@dbslave02 ~]#  mysql -u root -p

输入密码,进入数据库命令行。将主数据库快照恢复数据从数据库01中

[root@dbslave02 ~]#  show databases;

[root@dbslave02 ~]#  source /data/dbbackup.sql

[root@dbslave02 ~]#  show databases;

设置从服务器02,同步主服务器

[root@dbslave01 ~]#  change master to master_host='192.168.1.14',master_user='mysync',master_password='q123456',master_log_file='mysql-bin.000029',master_log_pos=382;

说明:

master_host 指定主服务器IP地址

master_user 主服务器专用于同步的用户名称(之前在主服务器上设置的)

master_password 主服务器专用于同步的用户密码

master_log_file 主服务器当前日志文件名称(必须对应)

master_log_pos 主服务器当前日志位置(必须对应)

启用从服务器02的同步
[root@dbslave02 ~]#  start slave;

查看状态
[root@dbslave02 ~]#  show slave status\G:

查看Slave_IO_Running和Slave_SQL_Running的状态,如果都为Yes,那么就成功了。

6 测试主服务,从服务器01、从服务器02的数据库同步

6.1 打开主服务器

[root@dbmaster ~]#  mysql -u root -p

删除 t2 数据库,增加 t5 数据库

MariaDB [(none)]> show databases;

MariaDB [(none)]> drop database t2;

MariaDB [(none)]> create database t5;

MariaDB [(none)]> show databases;

查看主服务器状态(注意当前日志文件名称,日志位置)

MariaDB [(none)]> show master status;

6.2 打开从服务器01

[root@dbslave01 ~]#  mysql -u root -p

查看从服务器01上的数据库

MariaDB [(none)]> show databases;

查看从服务器状态

MariaDB [(none)]> show slave status \G;

特别留意下面两行,是否对应主服务器当前的名称和位置 (另外需要注意,是否有额外错误行信息,如果一切正常,将不会有错误信息)

Master_Log_File: mysql-bin.000029

Read_Master_Log_Pos: 460

6.3 打开从服务器02

[root@dbslave02 ~]#  mysql -u root -p

查看从服务器02上的数据库

MariaDB [(none)]> show databases;

查看从服务器状态

MariaDB [(none)]> show slave status \G;

特别留意下面两行,是否对应主服务器当前的名称和位置 (另外需要注意,是否有额外错误行信息,如果一切正常,将不会有错误信息)

Master_Log_File: mysql-bin.000029

Read_Master_Log_Pos: 460

***

同步查看要点,查看主数据库的show master status 以及各从服务器 show slave status\G,相对应的当前日志文件名称和位置是否对应,各从服务器show slave status\G是否有错误信息。

有可能出现同步错误的地方,主数据器和从服务器的安装始数据不一致(包括数据库,表,行数据等)。(例如同步情况下,主数据删除表,此表在从数据库中不存在,则会出现错误)

一旦 show slave status\G,出现错误信息。可以按以下操作执行。

1.主数据库设置为只读。

2.生成主服务器的数据库快照,并上传到从服务器

3.从服务器的数据库停止同步状态,并进行同步状态重设

4.将主数据库快照,恢复到从服务器上

5.重新设置从服务器的数据库同步

6.启动从服务器的同步

7.查看各服务器状态是否正常

Mariadb数据库设置及操作 一主多从 备份还原(实测笔记)的更多相关文章

  1. MariaDB数据库设置用户密码

    SET PASSWORD [FOR user] = { PASSWORD('some password') | OLD_PASSWORD('some password') | 'encrypted p ...

  2. SQL serve 数据库--视图、事物、分离附加、备份还原

    视图是数据库中的一种虚拟表,与真实的表一样,视图包含一系列带有名称的行和列数据.行和列数据用来自定义视图的查询所引用的表,并且在引用视图时动态生成.  视图只能用来查询,不能增删改:不允许出现重复列 ...

  3. Centos 7 安装 设置 IP地址,DNS,主机名,防火墙,端口,SELinux (实测+笔记)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.虚拟系统安装 1.1 使 ...

  4. [原创]MySQL数据库查询和LVM备份还原学习笔记记录

    一.查询语句类型: 1)简单查询 2)多表查询 3)子查询 4)联合查询 1)简单查询: SELECT * FROM tb_name; SELECT field1,field2 FROM tb_nam ...

  5. MyBatis返回主键,MyBatis Insert操作返回主键

    MyBatis返回主键,MyBatis Insert操作返回主键 >>>>>>>>>>>>>>>>> ...

  6. MyBatis学习 之 六、insert操作返回主键

       数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二. insert元素 属性详解   其属性如下: parameterType ,入参的全 ...

  7. MyBatis insert操作返回主键

    在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数: Dao.java @Override public int insert(T record) { f ...

  8. MySQL/MariaDB数据库的主主复制

      MySQL/MariaDB数据库的主主复制 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.主主复制概述 1>.什么是主主复制 所谓的主主复制,说白了就是两台节点互为 ...

  9. MySQL/MariaDB数据库的多表查询操作

    MySQL/MariaDB数据库的多表查询操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.单表查询小试牛刀 [root@node105.yinzhengjie.org.cn ...

随机推荐

  1. 第18讲——ActiveX控件

    1,容器应用程序是可以嵌入或链接对象的应用程序.服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序. 2,可以安装一个TstCon32来测试ActiveX控件 3,可以用 Invalid ...

  2. CentOS7 NTP 安装配置

    NTP 网络时间协议用来同步网络上不同主机的系统时间.你管理的所有主机都可以和一个指定的被称为 NTP 服务器的时间服务器同步它们的时间.而另一方面,一个 NTP 服务器会将它的时间和任意公共 NTP ...

  3. tomcat启动报错No UserDatabase component found under key UserDatabase

    非正常关机,造成了tomcat下conf文件中的tomcat-user.xml文件异常,copy一个新的tomcat-user.xml覆盖就可以了.

  4. 数据结构与算法之链表-javascript实现

    链表的定义: 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点 ...

  5. 如何获取苹果手机的UDID

    获取苹果手机的UDID有很多种,比如Xcode,iTunes等等吧,个人比较推荐使用iTunes,因为比较官方,而且苹果电脑自带的有,而且Windows也可以下载安装. 1.下载安装itunes(点击 ...

  6. mongodb 启动脚本和配置

    http://justcoding.iteye.com/blog/2270466 http://blog.csdn.net/neutrojan/article/details/32328531

  7. 表单验证<AngularJs>

    常用的表单验证指令 1. 必填项验证 某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可: <input type="text" requir ...

  8. 使用WCF 创建 Rest service

    REST SERVICE 允许客户端修改url路径,并且web端功过url 请求数据. 他使用http协议进行通讯,想必大家都知道 . 并且我们可以通过设置进行数据类型转换, 支持XML,JSON 格 ...

  9. java中Class.forName("xxx")和ClassLoader().loadClass("xxx")的区别

    一.首先,查看Class类中的forName方法,可以发现有如下三个方法,但是我们通常用的是只有一个参数的方法. 简单介绍一下这三个方法: 第一个方法Class.forName("xxx&q ...

  10. memcache的lru删除机制

    惰性删除,get时才删除 LRU原理:当某个单元被请求的时候,维护一个计数器,通过计数器来判断最近谁最少使用,那就把谁踢出去. 注:即使某个key设置的永久有效,也会被踢出来,这个就是永久数据被踢的现 ...