MYSQL的主主/主从复制/xtrabackup/binlog恢复数据库以及使用ansible的常见模块

1、主从复制及主主复制的实现

主从复制:

采用10.0.0.6和10.0.0.7这两台主机来实现,第一步安装mysql-server8.0,centos8.0的系统

[root@mysql-master ~]#yum -y install  mysql-server------主节点
[root@mysql-slave ~]# yum -y install mysql-server------从节点


主从节点的配置:

[01:27:53 root@mysql-master ~]#cat  /etc/my.cnf--------------主节点
[mysqld]
server_id=6--------------------设置节点编号唯一的
log-bin=/data/mysql/mysql-bin---------开启日志功能,并规划存放路径
[root@mysql-master ~]#mkdir /data/mysql -pv
[root@mysql-master ~]#chown  -R mysql:mysql /data/mysql/
[root@mysql-master ~]#systemctl restart  mysqld.service 


[root@mysql-slave ~]# cat /etc/my.cnf------------------从节点
[mysqld]
server_id=7--------------------------节点编号唯一的
log-bin=/data/mysql/mysql-bin
[[root@mysql-slave ~]# mkdir -pv /data/mysql;chown -R mysql:mysql /data/mysql
[root@mysql-slave ~]# systemctl  restart  mysqld.service 


创建复制用户并查看二进制文件位置

mysql> create user 'repluser'@'10.0.0.%';-------主节点上设置

mysql> grant replication slave on *.* to 'repluser'@'10.0.0.%';-------主节点上设置
mysql> flush logs;----------------------------刷新日志
mysql> show  master logs;-----------------------查看当前位置

 

从节点的模板设置通过

mysql> help change master to

 来查找

 编写模板:

CHANGE MASTER TO
  MASTER_HOST='10.0.0.6',
  MASTER_USER='replication',
  MASTER_PASSWORD='123456',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000002',------------------主节点上的日志
  MASTER_LOG_POS=681;----------------------主节点上的日志的大小

启动线程并查看线程

 

 验证结果在10.0.0.6创建db1数据库,看10.0.0.7是否同步

 mysql主主复制

前期准备

在10.0.0.6和10.0.0.7安装mysql8.0

yum -y install  mysql-server ;mkdir /data/mysql -pv ;chown -R mysql:mysql /data/mysql

修改配置文件

[root@master6 ~]#vim  /etc/my.cnf
[mysqld]
server-id=6
log-bin=/data/mysql/mysql-bin

[root@master7 ~]# vim  /etc/my.cnf
[mysqld]
server-id=7
log-bin=/data/mysql/mysql-bin

 关键步骤:

先实现10.0.0.6到10.0.0.7主从单向复制

[root@master6 ~]#systemctl restart  mysqld.service 
[root@master6 ~]#mysql
mysql> show master  status;---------------第一步确定日志
mysql> create user apple@'10.0.0.%' identified by '123456';
mysql> grant replication  slave on *.* to apple@'10.0.0.%';--------第二步创建要复制用户和授权

slave
[root@master7 ~]# systemctl restart mysqld.service ----------第三步
[root@master7 ~]# mysql
mysql> CHANGE MASTER TO
    ->   MASTER_HOST='10.0.0.6',
    ->   MASTER_USER='apple',
    ->   MASTER_PASSWORD='123456',
    ->   MASTER_PORT=3306,
    ->   MASTER_LOG_FILE='mysql-bin.000002',
    ->   MASTER_LOG_POS=156;
Query OK, 0 rows affected, 9 warnings (0.01 sec)

mysql> start slave;---------------------第四步开启进程
mysql> show slave status\G;

实现10.0.0.7到10.0.0.6的单向复制

mysql> show master  status;-------------第一步确定10.0.0.7的日志

mysql> CHANGE MASTER TO---------------------------第二步10.0.0.6上设置
    ->   MASTER_HOST='10.0.0.7',
    ->   MASTER_USER='apple',
    ->   MASTER_PASSWORD='123456',
    ->   MASTER_PORT=3306,
    ->   MASTER_LOG_FILE='mysql-bin.000002',
    ->   MASTER_LOG_POS=697;

mysql> start slave;
mysql> show slave status\G;

 

 

 验证试验成果

 不能同时创建数据库

 虽然执行成功但会报错

 可以通过在mysql配置文件里 vim /etc/my.cnf 添加一条slave_skip_errors=1007过滤错误!

2、xtrabackup实现全量+增量+binlog恢复库

percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm只适合mariadb5.5和mysql5.7版不适用于mysql8.0/mariadb10.0版,况且现在企业几乎都是使用mysql5.7版本,且centos7比centos8稳定,本次实验使用centos7来演示。

xtrabackup工具备份和还原,需要三步实现
(1)备份:对数据库做完全或增量备份;
(2) 预准备: 还原前,先对备份的数据,整理至一个临时目录;
(3) 还原:将整理好的数据,复制回数据库目录中;

实验准备:
10.0.0.12的主机来做备份数据库,10.0.0.13用来做主数据库

接下来在10.0.0.12的操作!

第一步现将xtrabackup,下载下来!

yum -y  install  percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm

第二步创建一个文件夹进行备份数据,并且准备一个数据库文件hellodb!

mkdir /backup--------------用于备份数据的文件夹
mysql < hellodb_innodb.sql ----------导入一个数据文件

第三步是备份主机上做完全备份,并查看文件大小!

xtrabackup  -uroot --backup --target-dir=/backup/base

第四步做两次增量更新:

第一次增量更新:

在hellodb数据库的teachers表里添加一条新记录 

xtrabackup  -uroot --backup --target-dir=/backup/updata1 --incremental-basedir=/backup/base
----------------------------------在完全备份的基础上,进行增量更新!

进行第二次增量更新

在hellodb数据库里的teachers表里添加一条新记录 

xtrabackup  -uroot --backup --target-dir=/backup/updata2 --incremental-basedir=/backup/updata1
在第一次增量更新的基础上,在更新一次!

最终备份数据如下:

查看xtrabackup相关文件 

 

 数据三个时间点回滚问题的处理!

数据回滚在回复数据库的主机上进行操作,也就是10.0.0.13这台服务器!

第五步在10.0.0.13这台机器上,设置备份数据点的回滚

设置数据回滚先把备份数据的服务器上的数据复制到10.0.0.13这台服务器上并且安装xtrabackup:

scp -r /backup/* 10.0.0.13:/backup/----------在10.0.0.12上操作

yum -y install percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm--------在10.0.0.13上操作

查看复制过来的数据文件

完全备份数据点和第一次增量更新的数据点不回滚,第二次增量回滚:

[root@centos7 ~]# xtrabackup --prepare --apply-log-only --target-dir=/backup/base --阻止回 
                                                                                    滚
[root@centos7 ~]# du -sh /backup/*
28M	/backup/base------------------数据增大
1.5M	/backup/updata1
1.5M	/backup/updata2


 合并第1次增量备份到完全备份,并且不回滚:

[root@centos7 ~]# xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/updata1
[root@centos7 ~]# du -sh /backup/*
28M	/backup/base
9.5M	/backup/updata1
1.5M	/backup/updata2

合并第2次增量备份到完全备份:最后一次还原不需要加选项--apply-log-only

[root@centos7 ~]# xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/updata2
[root@centos7 ~]# du -sh /backup/*
50M	/backup/base
9.5M	/backup/updata1
9.5M	/backup/updata2

第六步复制到数据库目录,注意数据库目录必须为空,MySQL服务不能启动

[root@centos7 ~]# xtrabackup --copy-back --target-dir=/backup/base
[root@centos7 ~]# chown -R mysql:mysql /var/lib/mysql
[root@centos7 ~]# ll /var/lib/mysql/
total 40976
drwxr-x--- 2 mysql mysql      146 Jul 10 12:58 hellodb
-rw-r----- 1 mysql mysql 18874368 Jul 10 12:58 ibdata1
-rw-r----- 1 mysql mysql  5242880 Jul 10 12:58 ib_logfile0
-rw-r----- 1 mysql mysql  5242880 Jul 10 12:58 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Jul 10 12:58 ibtmp1
drwxr-x--- 2 mysql mysql     4096 Jul 10 12:58 mysql
drwxr-x--- 2 mysql mysql     4096 Jul 10 12:58 performance_schema
drwxr-x--- 2 mysql mysql       20 Jul 10 12:58 test
-rw-r----- 1 mysql mysql      478 Jul 10 12:58 xtrabackup_info
-rw-r----- 1 mysql mysql        1 Jul 10 12:58 xtrabackup_master_key_id

 

第七步启动数据库并查看结果

 10.0.0.12与10.0.0.13数据一致,数据备份完成!

基于binlog恢复数据库数据,由于是采用数据日志来恢复数据所以我就在一台机器上演示:

首先在centos8上安装mysql-server这个服务并启用该服务

yum -y install  mysql-server
systemctl   start  mysqld.service

其次修改配置文件开启日志功能创建日志文件所放的位置:

[root@CentOS8 ~]# mkdir  /data/mysql -pv--------创建日志放置的位置
[root@CentOS8 ~]# chown  -R mysql:mysql /data/mysql/
[root@CentOS8 ~]# cat /etc/my.cnf
[mysqld]
log-bin=/data/mysql/mysql-bin-----------------开启日志功能并规定存放路径
[root@CentOS8 ~]# systemctl   restart  mysqld.service --------重新启用mysql的功能

修改数据库的内容:

接下来采用日志恢复TID>=5的数据:

使用mysqlbinlog查看日志文件,查看处出删除在哪个位置:

[root@CentOS8 ~]# mysqlbinlog  /data/mysql/mysql-bin.000001 -v

删除是从1226开始的,我们只需要截取掉1226后面的数据即可然后再导入数据库即可!

[root@CentOS8 ~]# mysqlbinlog  /data/mysql/mysql-bin.000001 -v --stop-position=1226 > /data/binlog.sql--------------------把日志拷贝出来,除掉删除部分。
[root@CentOS8 ~]# mysql hellodb < /data/binlog.sql---------将拷贝出来的日志文件导入数据库!

实验完成! 

3、MyCAT实现MySQL读写分离

Mycat适用的场景很丰富,以下是几个典型的应用场景
单纯的读写分离,此时配置最为简单,支持读写分离,主从切换
分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片
多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化
报表系统,借助于Mycat的分表能力,处理大规模报表的统计
替代Hbase,分析大数据
作为海量数据实时查询的一种简单有效方案,比如100亿条频繁查询的记录需要在3秒内查询出来结
果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat可能是最简单有效的
选择
Mycat长期路线图
强化分布式数据库中间件的方面的功能,使之具备丰富的插件、强大的数据库智能优化功能、全面
的系统监控能力、以及方便的数据运维工具,实现在线数据扩容、迁移等高级功能
进一步挺进大数据计算领域,深度结合Spark Stream和Storm等分布式实时流引擎,能够完成快速
的巨表关联、排序、分组聚合等 OLAP方向的能力,并集成一些热门常用的实时分析算法,让工程
师以及DBA们更容易用Mycat实现一些高级数据分析处理功能
不断强化Mycat开源社区的技术水平,吸引更多的IT技术专家,使得Mycat社区成为中国的
Apache,并将Mycat推到Apache基金会,成为国内顶尖开源项目.

实验准备:

10.0.0.6----Mycat

10.0.0.7-------mysql(master)

10.0.0.9--------mysql(slave)

10.0.0.152--------mysql(Client)

10.0.0.7和10.0.0.9的mysql的主从复制就不演示前面有:

接下对10.0.0.6进行Mycat安装,现在下载wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz的包;

解压缩Mycat包并安装java

[18:25:20 root@Mycat ~]#mkdir /apps; tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps
[18:25:20 root@Mycat ~]yum -y install java

修改Mycat文件里的变量

[18:36:34 root@Mycat ~]#echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
[18:42:03 root@Mycat ~]#. /etc/profile.d/mycat.sh

 启动mycat:

[18:42:54 root@Mycat ~]#mycat start

检查是否启动成功:

client(已经安装mariadb5.5版本)登录认证 Mycat端

 

[root@centos7 ~]# mysql -uroot -p123456  -h 10.0.0.6 -P8066

修改Mycat文件的端口号和client端登录Mycat端的密码:

 

修改schema.xml实现读写分离策略

[19:26:33 root@Mycat ~]#echo  ' ' > /apps/mycat/conf/schema.xml 
[19:27:58 root@Mycat ~]#vim /apps/mycat/conf/schema.xml 
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"
dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="hellodb" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="host1" url="10.0.0.7:3306" user="root"--------------主节点
password="123456">
<readHost host="host2" url="10.0.0.9:3306" user="root"--------------从节点
password="123456" />
</writeHost>
</dataHost>
</mycat:schema>

重启动Mycat

[19:28:41 root@Mycat ~]#mycat restart

 在后端主服务器创建用户并对mycat授权

[root@CentOS8 ~]# mysql
mysql> create user root@'10.0.0.%' identified by '123456';
mysql> grant all on *.* to root@'10.0.0.%';

  查看从节点是否已经同步mycat的账号

client登录mycat端

[root@centos7 ~]# mysql -uroot -pubuntu  -h 10.0.0.6 

 

在client上连接Mycat服务器并测试

在master和slave的mysql里面开启mysql> set global general_log=on;日志监控

 

setect user()是用于检查这从节点的健康性,当从节点挂了,立马切换到主节点,但主节点挂了读写就不能运行了!

 实验完成!

4、ansible常用模块介绍

 介绍ansible自动化部署主要模块,包括command、shell、copy、fetch、file、archive、   unarchive、cron、yum_repository、dnf、service、firewalld、user、group、lineinfile、replace、  setup、debug等模块;

shell


类似command模块升级版—万能模块
官方文档:ansible.builtin.shell module – Execute shell commands on targets — Ansible Documentation

command


 命令模块 适合使用简单的命令 无法支持"<",">","|",";","&"等符   号
 官方文档:   https://docs.ansible.com/ansible/latest/modules/command_module.html#command-module

copy

概要
主要用于将管理主机上的数据信息传送给多台主机
官方文档:ansible.builtin.copy module – Copy files to remote locations — Ansible Documentation

fetch

概要
抓取文件到管理机上
官方文档:ansible.builtin.fetch module – Fetch files from remote nodes — Ansible Documentation

file

概要
实现创建/删除文件信息 对数据权限进行修改
官方文档:https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module

yum

概要
使用yum软件包管理器安装,升级,降级,删除和列出软件包和组。
官方文档:ansible.builtin.yum_repository module – Add or remove YUM repositories — Ansible Documentation

service

概要
用于管理服务运行状态
官方文档:ansible.builtin.service module – Manage services — Ansible Documentation

mount

概要
用于批量管理主机进行挂载卸载操作
官方文档:ansible.posix.mount module – Control active and configured mount points — Ansible Documentation

group

概要
远程批量创建用户组信息
官方文档:ansible.builtin.group module – Add or remove groups — Ansible Documentation

user

概要
远程批量创建用户信息
官方文档:ansible.builtin.user module – Manage user accounts — Ansible Documentation

unarchive

概要

官方文档:ansible.builtin.unarchive module – Unpacks an archive after (optionally) copying it from the local machine — Ansible Documentation

replace

该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用

ansible all -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'"
ansible all -m replace -a "path=/etc/fstab regexp='^#(UUID.*)' replace='\1'"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N64-HanYeWei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值