Linux运维学习之数据库的主从的复制

上周我们介绍了关于数据库的备份与恢复,大家也差不多可以在日常生产中做到数据的保障,但是如果我们的数据库服务器真的宕机或者各种问题崩溃,等我们恢复过来也会损失很多的用户或者交易额,这是生产中可以避免就避免的问题,所以今天我们来介绍数据库的主从复制,实现数据库的高可用和备份效果,减少时间库的维护时间,增加可用时间!

一般的生产环境中,都是一个主库加一个从库,还有一个远程的灾备库,当我们由于各种原因宕机崩溃时,还可以至少有一个库对外提供服务,不至于全盘over。

我们首先提供三台机器,分别为一主两从,分别安装mariadb-server。

修改主数据库的配置文件:vim /etc/my.cnf

[mysqld]

server-id=1                #给数据库指定唯一id

log-bin=mysql-bin    #开启mysql的二进制日志

skip-name-resolve    #跳过名词解析,非必须

systemctl restart mariadb

mysql < show master stauts;  #查看二进制日志状态,写哪个File,从那个Position开始

mysql < grant replication slave,replication client on *.* to [email protected]‘slave_server_ip‘ identified by ‘centos‘;      #建立一个备份使用的用户,给予复制的权限

修改从数据库的配置文件:vim /etc/my.cnf

[mysqld]

server-id=2

log-bin=mysql-bin

read-only=1             #开启只读,双写会问题

relay-log=mysql-relay-log   #开启中继日志

log-slave-updates=1       #开启从跟随主二进制日志更新

systemctl restart mariadb

mysql < change master to master_host = ‘master_server ip‘,   #指定主库的ip

< change master_user=‘slave‘        #上面定义的用户

< change master_password=‘centos‘     #上面定义的密码

< change master_log_file=‘File‘

< change master_log_pos=‘Position‘;

start slave;

show slave status\G;

Slave_IO_Running: Yes     #I/O线程正常运行
     Slave_SQL_Running: Yes    #SQL线程正常运行

当我们配置完成后我们可以使用数据的各种的SQL语句,测试一下是否会自动复制同步!

这里的好多有人要问了,为什么这么配置?从库的不可写是因为当两个数据库同时写到一个block块上是,文件系统会因此崩溃,这个问题是困扰我们的双写的最大问题之一;当我们的数据库发生改变时,会先写入二进制日志,二进制日志等满足条件时写入硬盘中去,当我们的在从上开启两个线程:I/O线程和SQl线程。其中I/O线程是当发现二进制日志数据更新时,自动拉取日志,写入到中继日志,中继日志又通过SQL线程,写入本机的mysql数据库中,此时,两个库的操作同步,但有个问题诞生了,如果我们的二进制日志被拉取走,主数据库是等待二进制回来,再返回用户写入操作ok,还是不等待直接返回ok呢?这里就牵涉到我们的mysql的同步异步机制了。

mysql的默认为异步机制,也就是当用户的写入操作完成后,记入二进制日志,我们就返回ok,不管从服务器的是否拉取,是否完成,这样就诞生了一个问题,如果我们此时的数据库崩溃,当我们的数据库从主数据库切换到从数据库时,数据会丢失,导致主从数据不一致。

而同步机制呢,是我们的主数据在被写入后,等待后端的所有从数据库复制完成,而我们的从数据库有时不只有一个,加上网络的消耗,服务时间上很漫长,而客户不会有那么多的耐心去等待该过程的完成,由此会导致客户流失。

但是解决的方法也很简单,就是二者取中,半同步机制应运而生,它只要有一个从数据复制完成,就立即返回客户写入ok,即强化了安全性,又减少了等待时间,而且半同步机制还可以设置超时时间,如果一定的时间内没有复制完成,就不管直接返回给客户结果。

那么我们如何切换到mysql的半同步呢?

我们的mysql中支持的多种插件在/usr/lib64/mysql/plugins/下,我们在其中可以看到有两个semisync_master.so和semisync_slave.so库,所以我们直接在数据库中安装即可。

主库:

mysql < install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;

mysql < show global variables like ‘rpl_semi%‘;

mysql < set global rpl_semi_sync_master_enabled =1 #开启主半同步

从库:

mysql < install global rpl_semi_sync_slave soname ‘semisync_slave.so‘;

mysql < show global varialbes like ‘rpl_semi%‘;

mysql < set global rpl_semi_sync_slave_enabled=1 #开启从半同步

mysql < stop slave;

mysql < start slave;

查看mysql的错误日志会看到改变的信息,mysql的错误日志一般在/var/log/mariadb/mariadb.log

Slave I/O thread: Start semi-sync replication to master ‘[email protected]:3306‘ in log ‘mysql-bin.000003‘ at position 809

看到这时我们的半同步就算是完成了。

今天的主从复制就到此结束,你们学到了吗?

时间: 2024-10-16 17:54:37

Linux运维学习之数据库的主从的复制的相关文章

Linux运维学习之 —— 搭建本地yum源

yum是RPM的前端工具,通过yum命令可以帮我们自动解决安装rpm包之间的依赖关系.下面是搭建本地yum仓库的步骤: 1.挂载光盘(光盘为CentOS-6.5-x86_64-bin-DVD2.iso)     mount /dev/cdrom1 /media ls一下/media这个目录,可以看到以下内容 2.创建本地文件夹,将Packages下的rpm包全部拷贝到本地文件夹     mount /dev/cdrom1 /media/     cp -r /media/Packages/* /

[ Linux运维学习 ] 路径及实战项目合集

我们知道运维工程师(Operations)最基本的职责就是负责服务的稳定性并确保整个服务的高可用性,同时不断优化系统架构.提升部署效率.优化资源利用率,确保服务可以7*24H不间断地为用户提供服务. 如果你想从事Linux运维相关工作,那么你可以来实验楼,因为实验上有: [Linux运维技术路径]:一条学习路径,多个阶段.若干课程带你一步步成为Linux运维工程师: [Linux运维与Devops实战]:12周时间,带你0基础到运维工程师,涵盖Linux运维常用技术和DevOps相关技术: --

linux 运维学习

Linux 运维学习笔记(一) 一. 配置网卡 1. 通过root账户登录后,输入setup命令. 2. 选择第三项"网络配置" 3. 继续选择"网卡设置" 4. 选择第一张网卡 5. 因为已经选择使用DHCP获取IP地址,所以IP地址不需要配,但是可以配一下DNS,然后保存退出! 6. 重启网卡(有三种方法) (1).ifup eth0 (2).etc/init.d/network restart (3)service network restart 7. 配置网

Linux运维学习-4——2016年7月26日

格式说明: 操作 概念 命令 说明及举例 四 du -sh /sys 查看文件.文件夹大小 /sys/class/scsi_host/host2/scan 在线扫盘(新加硬盘执行这个命令后才能发现) stat /etc/issue 更详细的看数据 蓝色:目录绿色:可执行文件浅蓝色:链接文件红色:压缩文件 创建-h文件名的文件,删除?访问?绝对路径 -:常规文件d:目录l:链接文件b:块设备(比如硬盘,有缓存)c:字符设备(不真实存在,没缓存) p:管道文件 例: 命令1 | 命令2 命令1的输出

Linux运维学习-2——2016年7月21日

格式说明: 操作 概念 命令 说明及举例 二 internet 因特网ethernet 以太网ctrl+alt+F1 图形界面ctrl+alt+F2-F6 字符界面 命令:who am i/who/who me i/tty/df/ifconfig/w/ halt 关机 reboot 重启 chvt 1-6 切换终端 init 3 关闭图形界面 init 5 打开图形界面 cp 复制 pwd 显示当前目录 lsblk 列出硬盘信息 id -u mg 查看用户ID,root为9,其他为普通用户,不加

Linux运维学习之——vim基础

linux下的vim文本编辑器的常用选项. vim(Visual interface Improved)是vi编辑器的增强版,体积小但是功能强大,是linux系统使用最频繁的文本编辑器,所以学好vim也是学好linux必不可少的技能! vim的命令格式: vim [options] [file ..] eg: [[email protected] ~]# vim hello.txt #用vim打开hello.txt文件 vim打开文件后的默认方式为编辑模式(也叫命令模式). 编辑模式(命令模式)

奔跑中的2015:Linux运维学习八大禁忌

随着Linux服务器在企业中的日益普及,高级Linux运维工程师岗位缺口也在递增.目前,为企业人才输送人才的各大院校,很少有开设Linux课程.我所了解和接触从事Linux运维工作同事和朋友多半是半路出家,很少有一出校门就去做Linux运维的相关工作.问其为何学习Linux因为技术?有的人说是兴趣所致,也有的人说是由于工作需要,可以说后者有点被迫无奈,但是痛并快乐着. Linux运维学习可以说"入门不易,深入更难",由于Linux系统主要是使用命令和脚本操作的特点:尤其多数Linux操

Linux运维学习路线,实用LINUX教程推荐学习收藏

Linux操作系统在短短的几年之内得到了非常迅猛的发展,这与linux具有的良好特性是分不开的.Linux包含了UNIX的全部功能和特性.简单来说,linux具有以下主要特性:遵循GNU GPL,开放性,多任务,多用户,设备独立性,提供了丰富的网络功能,可靠的系统安全,良好的可移植性.下面给大家说说Linux运维学习路线,实用LINUX教程推荐大家学习收藏. 关于Linux运维学习很多人都有自己不同的理由,我们不妨来分析一下: Linux是免费的不用花一分钱,能够节约大笔的成本:Linux是开源

最适合初学者的Linux运维学习教程2018版

Linux运维工程师是一个新颖岗位,现在非常吃香,目前从行业的角度分析,随着国内软件行业不断发展壮大,越来越多复杂系统应运而生,为了保证系统稳定运行,必须要有足够多的Linux运维工程师.维护是软件生命周期中非常重要一个阶段,当前国内的运维工程师人才相对稀缺,故在未来几年,运维工程师肯定会成为一个热门职业. Linux运维工程师发展前景从薪资待遇这方面来看,工作经验不到1年的人,在北上广大概是4k左右,基础相对好些的人,能达到5.5K左右.有相关工作经验的,一般在7K以上.Linux运维相关工作