MySQL运维进阶-MySQL双主(master-master)+半同步(Semisync Repl

MySQL --> MariaDB --> Percona-Server

MySQL: oracle ,
commutity : 社区版 5.5 5.6 5.7 8.0
MariaDB:
5.5 10.x
Percona:
Percona-Server
InnoDB --> XtraDB
Xtrabackup
percona-tools:

存储引擎:
引擎:也称为表类型,表级别概念,不建议在同一个库中的表上使用不同的ENGINE;
CREATE TABLE ... ENGINE STORAGE_ENGINE_NAME ...
SHOW TABLE STATUS

                常见的存储引擎: SHOW ENGINES;
                            MyISAM,  Aria, InnoDB,  MRG_MYISAM, CSV, BLACKHOLE,...

                InnoDB : InnoBase
                            Percona-XtraDB,Supports  transactions , row-level  locking,  and foreign  keys

              数据存储于“表空间” 中:
                        (1)所有数据库中的所有类型为InnoDB的表的数据和索引存储于同一个表空间中;
                                            表空间文件:datadir定义的目录中,文件 ibdata1,ibdata2...
                            (2)  innodb_file_per_table=ON,意味着每表使用单独的表空间文件;  每表的数据文件(数据和索引,存储于数据库目录)存储于自己专用的表空间文件中,并存储于数据库目录下:tablename.ibd
                            表结构的定义:在数据库目录,tablename.frm

 事务型存储引擎,适合对事物要求较高的场景中;但较适用于处理大量短期事务;
     基于MVCC(Mutil Version Concurrency Control)支持高并发;支持四个隔离级别,默认级别为 REPETABLE-READ(可重读-幻读);  间隙锁以防止幻读:(MVCC多版本控制就是解决了幻读问题)
     使用聚集索引(主键索引);支持“自适应Hash索引”;
     锁粒度: 行级锁,间隙锁

     总结:
                     数据存储:表空间;
                     并发:MVCC,间隙锁,行级锁
                     索引:聚集索引、辅助索引;
                     性能:预读操作、内存数据缓冲、内存索引缓存、自适应Hash索引、插入操作缓存区;
                     备份:支持热备;
            SHOW   ENGINE  INNODB  STATUS;

MyISAM:-> Aria

        支持全文索引(FULLTEXT index)、压缩、空间函数(GIS);
        不支持事务
        锁粒度:表级锁
        崩溃后无法保证表安全恢复

        适用场景:只读或读多写少的场景、较小的表(以保证崩溃后恢复的时间较短);

        文件:每个表有三个文件,存储于数据库目录中
            tbl_name.frm:表格式定义;
            tbl_name.MYD:数据文件;
            tbl_name.MYI:索引文件;

        特性:
            加锁和并发:表级锁;
            修复:手动或自动修复、但可能会丢失数据;
            索引:非聚集索引;
            延迟索引更新;
            表压缩;

显示锁的使用:
            1)LOCK TABLES
                        LOCK TABLES  tb1_name  read|write...
                        UNLOCK   TABLES;
            2)FLUSH TABLES;
                  FLUSH TABLES  tb1_name,.... [WITH READ LOCK];
                        UNLOCK TABLES;
            3) SELECT  cluase
                 [FOR UPDATE | LOCK IN SHARE MODE]

事务:
             事务:一组原子性的SQL查询、或者是一个或多个SQL语句组成的独立工作
             单元:
                                 事务日志:
                                             innodb_log_files_in_group
                                             innodb_log_group_home_dir
                                             innodb_log_file_size
                                             innodb_mirrored_log_groups
                ACID测试:
                            A:AUTOMICITY,原子性,整个事务中的所有操作要么全部成功执行,要么失败后回滚;
                            C:CONSISTENCY,一致性,数据库总是应该从一个一致性状态转为另一个一致性状态;
                            I:ISOLATION ,隔离性, 一个事务所做出的操作在提交之前,是否能为其他事务可见;处于保证并发操作之目的,隔离有多种级别;
                            D:DURABILITY,  持久性; 事务一旦提交,其所做出的修改会永久保存;

自动提交;单语句事务
            mysql > SELECT  @@autocommit;
            mysql > SET @@session.autocommit=0; 关闭当前会话自动提交

手动控制事务:
            启动:START  TRANSACTION
            提交:COMMIT
            回滚:ROLLBACK

            事务支持savepoints:
                        SAVEPOINT  identifier
                        ROLLBACK  [WORK]  TO  [SAVEPOINT]  identifier
                        RELEASE  SAVEPOINT  identifier

事务隔离级别:完全理解
            READ-UNCOMMITIED :读未提交 --> 脏读问题
            READ-COMMITIED: 读提交 -->不可重复读;
            REPEATABLE-READ : 可重复度 --> 幻读问题;  默认级别
            SERIALIZABLE :串行化;

            mysql > SELECT @@session.tx_isolation;
            mysql > SHOW ENGINE  innodb  STATUS;

    MySQL用户和权限管理
                    用户账号: [email protected]
                            user  :  账户名称;
                                    host :   此账户可通过哪些客户端主机请求创建连接线程;
                                    %    :  任意长度的任意字符;
                                    _       :   任意单个字符;

                                    skip_name_resolve=ON

        重命名:RENAME   USER
                        RENAME  USER  old_user  TO new_user [,old_user TO new_user] ...

         删除用户:
                      DROP  USER  ‘username‘@‘host‘  [,‘username1‘@‘host‘]...
                        FLUSH  PRIVILEGES;

            修改用户密码:
                        1)SET PASSWORD  [FOR ‘username‘@‘host‘]  =PASSWORD(‘string‘);
                        2)  UPDATE  mysql.user  SET password=PASSWORD(‘string‘)   WHERE user=‘username‘  AND host=‘HOST‘;
                        3)  mysqladmin  -uUSERNAME  -hHOST  -p password  ‘NEW_PASS‘
                        4)  FLUSH PRIVILEGES;

忘记管理员密码的解决办法:
1) 启动mysqld进程时,使用 --skip-grant-tables和--skip-networking选项
Centos 7 : mariadb.service
Centos 6 : /etc/init.d/mysqld
2) 通过UPDATE命令修改管理员密码;
3) 以正常方式启动mysqld进程;

查看授权: SHOW  GRANTS;
                SHOW  GRANTS  [FOR  ‘username‘@‘host‘ ];
取消授权: REVOKE
       REVOKE   priv_type  on   priv_level   FROM ‘user‘@‘host‘ ...
             REVOKE  ALL PRIVILEGES ,GRNAT OPTION  FROM user..

查询缓存相关的服务器变量:
query_cache_limit : 能够缓存的最大查询结果;(单语句结果集大小上限)
有着较大结果集的语句:显示使用SQL_NO_CACHE,以避免先缓存再移出;
query_cache_min_res_unit :内存缓存块的最小分配单位;缓存过小的查询结果集会浪费内存空间;
较小的值会减少空间浪费,但是会导致更频繁的内存分配以及回收操作; 较大值的会带来空间浪费;
query_cache_size : 查询缓存空间的总共可用的大小;单位是字节, 必须是1024的整数倍;
query_cache_type: 缓存功能启用与否;
ON:启用; OFF :禁用
DEMAND: 按需缓存,仅缓存SELECT语句中带SQL_CACHE的查询结果;
query_cache_wlock_invalidate : 如果某表被其他连接锁定,是否仍然可以从查询缓存中返回查询结果;默认为 OFF,表示可以;ON则表示不可以;

状态变量:

            mysql>SHOW GLOBAL STATUS LIKE ‘Qcache%‘;
        命中率: Qcache_hits/Com_select

MySQL日志:

  1)二进制日志
                    用于记录引起数据改变或存在引起数据改变的潜在可能性的语句或改变后的结果,也可能是二者混合;
                    功用:重放

        binlog_format=(STATEMENT|ROW|MIXED)
                    STATEMENT: 语句;
                    ROW : 行;
                    MIXED: 混编;

     查看二进制日志文件列表:
                     SHOW  MASTER|BINARY  LOGS;

        查看当前正在使用的二进制日志文件:
                        SHOW  MASTER  STATUS;
        查看二进制日志文件中的事件:
                        SHOW BINLOG  EVENTS  [IN ‘log_name’] [FROM pos][LIMIT [offset,] row_count]

     服务器变量:
                     log_bin=/PATH/TO/BIN_LOG_FILE |OFF
                   session.sql_log_bin={ON | OFF}
                          控制某会话中的“写‘’操作语句是否会被记录到二进制日志文件中;
                        max_binlog_size=
                        sync_binlog={1|0}  :默认是0,此时mysql性能最好,但是也是最危险的,一旦发生崩溃,存在内存缓存中的语句信息将丢失,1是最安全的也是最慢的,几乎将二进制内存缓存信息与磁盘实时同步刷新;  可以定义N次,每执行多少次事务后刷新缓存到磁盘中

mysqlbinlog: 客户端程序
                    YYYY-MM-DD   hh:mm:ss

            --start-datetime=
            --stop-datetime=

            -j,  --start-position=
              --stop-position=

                --user, --host, --password

中继日志:从服务器上记录下来从主服务器的二进制日志文件同步过来的事件;

事务日志:事务型存储引擎innodb用于保证事务特性的日志文件
redo log
undo log

备份策略:
xtrabackup:
全量+差异+binlog
全量+增量+binlog
mysqldump:
全量+binlog

基于lvm2的备份:
前提:要求数据文件和事务日志位于同一个逻辑卷:
1)请求锁定所有表:
mysql > FLUSH TABLES WITH READ LOCK;
2) 记录二进制文件事件位置:
mysql > FLUSH LOGS;
mysql > SHOW MASTER STATUS;
mysql -e ‘SHOW MASTER STATUS;‘ >> /PATH/TO/SOME_POS_FILE

             3)创建快照卷
                 lvcreate  -s  -L 100M  -p r  -n SNAP-NAME  /dev/VG-name/lv-name
                4) 释放锁
                    mysql > UNLOCK  TABLES;
                5) 挂载快照卷,并执行备份,备份完成后删除快照卷;
                6) 周期性备份二进制日志;

Xtrabackup:

        备份 --> 应用日志  --> 还原
                        应用日志: --apply-log
                        还原: --copy-back

        完全备份: 完全+binlog(总结):

                     备份: 完全+增量+binlog...
                     准备:
                                        innobackupex   --apply-log  --redo-only  BASEDIR
                                        innobackupex   --apply-log   --redo-only  BASEDIR  --incremental-dir=INCREMENTTAL-DIR
                        恢复:
                                        innobackupex    --copy-back   BASEDIR

         备份单库:
                         --databases;

    总结:
                    mysqldump+binlog
                    lvm2+cp/tar+binlog
                    xtrabackup(innodb)+binlog

实验【mysql主从复制架构与进阶】:

MySQL双主(master-master)+半同步(Semisync Replication)

一、环境
主机名 主机IP

mysqlA 172.18.252.221

mysqB 172.18.252.222

操作系统: CentOS 6.5 2.6.32-431.el6.x86_64

MySQL版本 mysql-community-server-5.7.5-0.6.m15.el6.x86_64

二、架构

1.mysqlA和mysqlB互为主备,即双主架构Master-Master

原文地址:http://blog.51cto.com/12947626/2125165

时间: 2024-10-12 01:11:18

MySQL运维进阶-MySQL双主(master-master)+半同步(Semisync Repl的相关文章

MariaDB数据库主从复制、双主复制、半同步复制、基于SSL的安全复制实现及其功能特性介绍

一.复制概述 MariaDB/MySQL内建的复制功能是构建大型,高性能应用程序的基础.将MySQL的数据分布到多个系统上去,这种分布的机制,是通过将MySQL的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位

Mysql运维管理-MySQL备份与恢复实战案例及生产方案17

1.全量备份与增量备份 1.1 全量备份 全量数据就是数据库中所有的数据,全量备份就是把数据库中所有的数据进行备份. 备份所有库: mysqldump -uroot -p123456 -S /data/3306/mysql.sock -F -B –A gzip >/server/backup/mysq_backup_$(date +%F).sql.gz 备份一个库: mysqldump -uroot -p123456 -S /data/3306/mysql.sock -F -B linzhong

Mysql运维管理-MySQL数据库存储引擎知识19

1.MySQL 引擎概述 1.1 什么是存储引擎 我们在录制一个视频文件的时候,可以转换成不同的格式如mp4,avi,wmv等,而且在电脑的磁盘上也会存在于不同类型的文件系统windows里常见的ntfs,fat32,存在于linux操作系统里常见的ext3,ext4,xfs.但是跟我们呈现的内容都是一样的,直观的区别是占用系统空间的大小与清晰程度不一样.那么数据库存储引擎也有很多种存储方式.无论用什么存储引擎来存储,用户看到的数据都是一样的.不同的引擎存储,引擎功能,占用的空间的大小,读取性能

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

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

mysql运维必会的一些知识点整理

(1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是否运行 lsof -i :3306 netstat -lntup |grep 3306 3.为MySQL设置密码或者修改密码 设置密码 mysql -uroot -ppassword -e "set passowrd for root = passowrd('passowrd')" mys

mysql学习-mysql8.0配置双主复制+keepalived实现高可用架构

一般小型公司数据库,使用主从复制即可保证数据库的高可用,但是一旦主数据库故障,切换到从库需要一定的时间,这样就导致了停机时间过长,不能及时恢复业务.使用双主(master)配合keepalived这种mysql高可用架构也是基于主从复制的原理而搭建的.这是一种简单.便捷的解决方案,在高可用集群环境中,keepalived使用vip,利用keepalived自带的服务监控功能和自定义脚本来实现mysql故障时自动切换. 1.mysql双主复制介绍 双主复制,就是相互做主从复制,每个master既是

MySql数据库双主(双向)同步实现数据库双主热备

MySql数据库双主(双向)同步实现数据库双主热备配置步骤有一点复杂,大家一定要看清楚每一步小细节哦,希望文章对各位会带来帮助呀. 之前写过一篇 mysql Master Slave主从同步(复制)配置,属于数据库备份级别的.现在的需求是,两台服务器上都装有数据库,为了防止某一服务器出现问题而影响业务的运行,需要准备两台服务器分别运行mysql,且需要两台服务器的数据是保持同步的.也就是现在要说的mysql双向同步,实现数据库主备模式. 基础环境 操作服务器系统:Ubuntu 12.04 64-

搭建稳固的MySQL运维体系

本课时主要包含 MySQL 监控要点.MySQL SQL 审核执行.MySQL 备份恢复等内容. MySQL 监控要点 首先我们来学习 MySQL 监控要点,主要涉及服务器和 MySQL 两个方向的监控告警. 在这两个监控告警方向需要重点关注监控策略.监控趋势图及报警方式. 监控策略指的是每个监控项的告警阈值,例如 threads_running > 30 触发报警. 监控趋势图指的是对每个时间点,项目所采集数据的图形展现,基于历史数据的比对能够快速发现异常的监控项. 报警方式则按需配置,Ema

公司没有 DBA,Mysql 运维自己来

目录   一.虚拟机部署  二.基本运维  三.配置  四.常见问题  五.脚本  参考资料 如果你的公司有 DBA,那么我恭喜你,你可以无视 Mysql 运维.如果你的公司没有 DBA,那你就好好学两手 Mysql 基本运维操作,行走江湖,防身必备. 环境:CentOS7 版本: 一.虚拟机部署 本文仅介绍 rpm 安装方式 安装 mysql yum 源 官方下载地址:https://dev.mysql.com/downloads/repo/yum/ (1)下载 yum 源 $ wget ht