Linux九阴真经之九阴白骨爪残卷15

一、MySQL复制相关概念

1、主从复制:主节点将数据同步到多个从节点

2、级联复制:主节点将数据同步到一个从节点,其他的从节点在向从节点复制数据

3、同步复制:将数据从主节点全部同步到从节点时才返回给用户的复制策略叫同步复制

4、异步复制:只要数据写入到主节点就立即返回给用户同步完成

5、读写分离:在前端加一个调度器,负责将改变数据的语句和查询数据的语句分开调度,把写操作调度到主节点,读操作调度到从节点

主节点:

  • dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events

从节点:

  • I/O Thread:向Master请求二进制日志事件,并保存于中继日志中
  • SQL Thread:从中继日志中读取日志事件,在本地完成重放

跟复制功能相关的文件:

  • master.info:用于保存slave连接至master时的相关信息,例如账号、密码、服务器地址等
  • relay-log.info:保存在当前slave节点上已经复制的当前二进制日志和本地replay log日志的对应关系

复制架构:

  • 一主一从
  • 一主多从
  • 主主复制
  • 环状复制
  • 级联复制
  • 多主一从

常见的架构有主从架构或者级联架构

二、简单的一主一从架构实现

一、数据库搭建主从架构

1、主服务器配置

~]# vim /etc/my.cnf
    [mysqld]
    log_bin
    binlog_format=ROW
    log-basename=master1
    server_id=1
~]# systemctl restart mariadb
~]# mysql
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO [email protected]‘192.168.95.5‘ IDENTIFIED BY ‘testpass‘;  #授权同步账户及主机IP
MariaDB [(none)]> SHOW MASTER LOGS;
+--------------------+-----------+
| Log_name           | File_size |
+--------------------+-----------+
| master1-bin.000001 |     26756 |
| master1-bin.000002 |    921736 |
| master1-bin.000003 |       401 |  #记录此位置,从服务器从这里开始同步
+--------------------+-----------+

2、从服务配置

~]# vim /etc/my.cnf
    [mysqld]
    server_id=2  #服务器ID唯一
    relay_log=relay-log
    relay_log_index=relay-log.index
    read_only=ON
~]# systemctl restart mariadb
~]# mysql
MariaDB [(none)]> CHANGE MASTER TO
    -> MASTER_HOST=‘192.168.95.2‘,  #指定主节点IP
    -> MASTER_USER=‘testuser‘,  #同步用户的用户名
    -> MASTER_PASSWORD=‘testpass‘,  #密码
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE=‘master1-bin.000003‘,  #主服务器记录的文件
    -> MASTER_LOG_POS=401,  #位置
    -> MASTER_CONNECT_RETRY=10;  #重试时间10秒--可省略
MariaDB [(none)]> START SLAVE;  #开始主从复制

实验到此就完成了 新数据库的主从服务器的搭建,此时主服务器的文件有任何更改将会同步到服务器上。如果从服务器重启,主服务器在此时更新了问你件,待从服务器启动之后,数据会自动同步。

3、测试

在主节点上生成一些数据:
MariaDB [(none)]> CREATE DATABASE testdb;
MariaDB [(none)]> use testdb
MariaDB [testdb]> create table testlog (id int auto_increment primary key,name char(30),age int default 20);
MariaDB [testdb]> delimiter $$
MariaDB [testdb]> create procedure pro_testlog()
    -> begin
    -> declare i int;
    -> set i = 1;
    -> while i < 100000
    -> do insert into testlog(name,age) values (concat(‘testuser‘,i),i);
    -> set i = i +1;
    -> end while;
    -> end$$
MariaDB [testdb]> delimiter ;
MariaDB [testdb]> START TRANSACTION;
MariaDB [testdb]> CALL pro_testlog;
MariaDB [testdb]> COMMIT;
在从节点上查看同步情况:
MariaDB [(none)]> SELECT COUNT(*) FROM testdb.testlog;
+----------+
| COUNT(*) |
+----------+
|    99999 |  #同步成功
+----------+
MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ****************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.95.2
                  Master_User: testuser
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: master1-bin.000003
          Read_Master_Log_Pos: 10389814
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 10389944
        Relay_Master_Log_File: master1-bin.000003
             Slave_IO_Running: Yes  #IO线程已启动
            Slave_SQL_Running: Yes  #SQL线程已启动
        Seconds_Behind_Master: 0    #主从复制的时间差
             Master_Server_Id: 1

二、旧数据库新加从服务器

1、主服务器配置

~]# vim /etc/my.cnf
    [mysqld]
    log_bin
    binlog_format=ROW
    log-basename=master1
    server_id=1
~]# systemctl restart mariadb
~]# mysqldump -A -F --single-transaction --master-data=1 > full.sql  #完全备份到文件内
~]# scp full.sql [email protected]:/root/   #将安全备份复制到远程主机
~]# mysql -e ‘GRANT REPLICATION SLAVE ON *.* TO [email protected]‘192.168.95.5‘ IDENTIFIED BY ‘testpass‘;‘

2、从服务器配置

~]# vim /etc/my.cnf
    [mysqld]
    server_id=2
    relay_log=relay-log
    relay_log_index=relay-log.index
    read_only=ON
~]# systemctl restart mariadb
~]# vim full.sql  #在备份的SQL文件中加入以下信息
    CHANGE MASTER TO
    MASTER_HOST=‘192.168.95.2‘,
    MASTER_USER=‘testuser‘,
    MASTER_PASSWORD=‘testpass‘,
    MASTER_PORT=3306,
    MASTER_LOG_FILE=‘master1-bin.000005‘,
    MASTER_LOG_POS=245,
    MASTER_CONNECT_RETRY=10;
~]# mysql < full.sql  #导入SQL的同时配置已经完成
MariaDB [(none)]> SELECT COUNT(*) FROM testdb.testlog;
+----------+
| COUNT(*) |
+----------+
|    99999 |
+----------+
MariaDB [(none)]> START SLAVE;  #启动复制

3、查看同步状态

show slave status\G 

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.95.2
Master_User: laobai
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master1-bin.000003
Read_Master_Log_Pos: 245
Relay_Log_File: mariadb-relay-bin.000005
Relay_Log_Pos: 531
Relay_Master_Log_File: master1-bin.000003
Slave_IO_Running: Yes      #同步状态正常 
Slave_SQL_Running: Yes

原文地址:https://www.cnblogs.com/huxiaojun/p/9215517.html

时间: 2024-10-30 18:42:39

Linux九阴真经之九阴白骨爪残卷15的相关文章

Linux九阴真经之九阴白骨爪残卷2(SSH)

SSH ssh:安全的远程登录 两种方式的用户登录认证 基于passwork 基于key 客户端 常见的客户端工具有:Windows版的putty.securecrt.xshell:linux中有ssh.sftp.scp.slogin等 配置文件: /etc/ssh/ssh_config ssh命令 用法:ssh  [email protected]   CMD 选项: -p   port :  远程服务器监听端口 -b          :  指定连接的源IP -v          :  调

Linux九阴真经之九阴白骨爪残卷5(ansible用法二之Playbook和YAML语法)

playbook是由一个或多个"play"组成的列表 play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色.从根本上来讲,所谓task无非是调用ansible的module.将多个play组织在一个playbook中,即可让他们联通起来按事先编排的机制运行. Playbook 采用yaml 语言编写每一个ansible 的 playbook 都是一个yaml格式的文件,因此要学习编写剧本(playbook), 我们先来了解 yaml 语法的基

Linux九阴真经之九阴白骨爪残卷13()

备份还原案例 前提:log_bin=ON 一.早上上班后误删数据库,如何恢复数据库 1.假设早上已经完成备份 (开启二进制),然后在students表里新增了一条数据 [[email protected] ~]#mysqldump -A -F --single-transaction --master-data=2 > /backup/full.sqlMariaDB [hellodb]> insert students values (26,'laobai',30,'M',7,2); 2.然后

Linux九阴真经之九阴白骨爪残卷1(加密和安全)

CA和证书 1.KPI :公共秘钥体系 签证机构:CA 注册机构:RA 证书吊销列表:CRL 证书存取库 509:定义了证书的结构以及认证协议标准 版本号序列号签名算法                   主体公钥         颁发者                      CRL分发点有效期限                    扩展信息主体名称                   发行者签名 证书类型: 证书授权机构的证书 服务器 用户证书 获取证书两种方法: ?使用证书授权机构 生

Linux九阴真经之九阴白骨爪残卷8(存储函数、存储过程、触发器)

存储函数 说明: 参数可以有多个,也可以没有参数,必须有且只有一个返回值. 1.系统函数 参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.html 2.自定义函数(user-defined function:UDF) 自定义函数保存在mysql.proc表中 查看UDF列表 SHOW FUNCTIOIN STATUS; 查看UDF定义 SHOW CREATE FUNCTION function_name 删除U

Linux九阴真经之九阴白骨爪残卷11(并发访问控制和事务Transactions)

一.并发访问控制 实现的并发访问的控制技术是基于锁: 锁分为表级锁和行级锁,MyISAM存储引擎不支持行级锁:InnoDB支持表级锁和行级锁: 锁的分类有读锁和写锁,读锁也被称为共享锁,加读锁的时候其他的人可以读:写锁也称为独占锁或排它锁,一个写锁会阻塞其他读操作和写操作: 锁还分为隐式锁和显式锁,隐式锁由存储引擎自行管理,显式锁是用户手动添加锁: 锁策略:在锁粒度及数据安全性寻求的平衡机制. 显式锁的使用方法:LOCK TABLES tbl_name READ|WRITE MariaDB [s

Linux九阴真经之九阴白骨爪残卷12(备份还原)

一.备份策略 1.备份的类型 类型1: 热备份:读写不受影响(MyISAM不支持热备,InnoDB支持热备) 温备份:仅可以执行读操作 冷备份:离线备份,读写操作均中止 类型2: 物理备份:复制数据文件进行备份,占用较多的空间,速度快 逻辑备份:将数据导出至文本文件中,占用空间少,速度慢,可能丢失精度 类型3: 完全备份:备份全部数据 增量备份:仅备份上次完全备份或增量备份以后变化的数据,备份较快,还原复杂 差异备份:仅备份上次完全备份以来变化的数据,备份较慢,还原简单 2.备份需要考虑的因素

每天学点linux (更新:2014.08.15)

1.shell脚本如何debug? 第一次写了300行的shell脚本,这么一大坨怎么debug呀?难道一块一块拿出来测试吗? [[email protected] ~]# sh [-nvx] scripts.sh 选项与参数: -n :不要运行 script,仅查询语法的问题: -v :再运行 sccript 前,先将 scripts 的内容输出到萤幕上: -x :将使用到的 script 内容显示到萤幕上,这是很有用的参数! 参考:http://vbird.dic.ksu.edu.tw/li

Linux中Grep常用的15个例子【转】

转自:https://www.aliyun.com/jiaocheng/1390860.html?spm=5176.100033.1.9.6a1e41e8Pdjynm 摘要:Grep命令主要用于从文件中查找指定的字符串.首先建一个demo_file:$catdemo_fileTHISLINEISTHE1STUPPERCASELINEINTHISFILE.thislineisthe1stlowercaselineinthisfile.ThisLineHasAllItsFirstCharacterO