11.25
事物隔离级别
事物日志redo undo
事物锁 begin; update
事物日志性能优化 innodb_flush_log_at_trx_commit=0|1|2|3
innodb事务日志相关配置; show variables like '%innodb_log%';
通用日志
通用日志:记录对数据库的通用操作,包括错误的SQL语句
通用日志可以保存在:file(默认值)或 table
通用日志相关设置
general_log=ON|OFF
general_log_file=HOSTNAME.log
log_output=TABLE|FILE|NONE
慢查询(重点)
slow_query_log=on|off show profile for query 2;
long_query_time=N;
set global log_queries_not_using_indexes=ON;
二进制日志(重点)
记录导致数据改变或潜在导致数据改变的SQL语句
记录已提交的日志
不依赖于存储引擎类型
功能:通过“重放”日志文件中的事件来生成数据副本
注意:建议二进制日志和数据文件分开存放
二进制日志记录三种格式;
基于“语句”记录:statement,记录语句,默认模式
基于“行”记录:row,记录数据,日志量较大 (可恢复数据)
混合模式:mixed, 让系统自行判定该基于哪种方式进行
二进制日志只记录已提交的事物 相当于离线日志
还原数据 临时关闭二进制日志 set sqllog
显示二进制记录文件 show binary logs
查看使用中的二进制文件 show master status
查看二进制文件指定内容 show binlog events in 'mysql-bin.000010';
删除000003以前的二进制文件 purge binary logs to 'mysql-bin.000003';
创建一个新的二进制文件 flush logs;
数据库备份还原(重点)
完全备份
增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较
快,还原复杂
差异备份:仅备份最近一次完全备份以来变化的数据,备份较慢,还原简单
前面必须有个完全备份
注意:二进制日志文件不应该与数据文件放在同一磁盘
冷、温、热备份
冷备:读写操作均不可进行
温备:读操作可执行;但写操作不可执行
热备:读写操作均可执行
MyISAM:温备,不支持热备 (不支持事务)
InnoDB:都支持 (不包括DDL语句)
物理和逻辑备份
物理备份:直接复制数据文件进行备份,与存储引擎有关,占用较多的空间,速度快
逻辑备份:从数据库中“导出”数据另存而进行的备份,与存储引擎无关,占用空间少,速度慢,可
能丢失精度
备份什么
数据
二进制日志、InnoDB的事务日志
程序代码(存储过程、函数、触发器、事件调度器)
服务器的配置文件
备份工具
cp, tar等复制归档工具:物理备份工具,适用所有存储引擎;只支持冷备;完全和部分备份
LVM的快照:先加锁,做快照后解锁,几乎热备;借助文件系统工具进行备份
mysqldump:逻辑备份工具,适用所有存储引擎,温备;支持完全或部分备份;对InnoDB存储
引擎支持热备,结合binlog的增量备份
xtrabackup:由Percona提供支持对InnoDB做热备(物理备份)的工具,支持完全备份、增量备份
MariaDB Backup: 从MariaDB 10.1.26开始集成,基于Percona XtraBackup 2.3.8实现
mysqlbackup:热备份, MySQL Enterprise Edition组件
mysqlhotcopy:PERL 语言实现,几乎冷备,仅适用于MyISAM存储引擎,使用LOCK TABLES、
FLUSH TABLES和cp或scp来快速备份数据库
重点mysqldump xtrabackup
基于LVM备份
1 请求锁定所有表
mysql>flush tables with read lock;
2 记录二进制日志文件及事物位置
mysql>flush logs; mysql>show master status;
mysql-e 'show master status'>/path/to/somefile
3 创建快照
lvcreate -L # -s -p r -n name /dev/vg_name/lvname
4 释放锁
mysql>unlock tables;
(5) 挂载快照卷,执行数据备份(6) 备份完成后,删除快照卷(7) 制定好策略,通过原卷备份二进制日志
逻辑备份工具 mysqldump,mydumper,phpmyadmin
Schema和数据存储在一起、巨大的SQL语句、单个巨大的备份文件
mysqldump备份工具
mysqldump database [tables] mysqldump -B DB1[DB2 DB3...] mysqldump -A
分库备份并压缩
利用二进制日志还原数据库
二进制日志独立存放
完全备份,并记录备份的二进制位置
mysqldump -A --master-data=2 | gzip > /backup/alldate +%F
.sql.gz
11.27
mysql的mylsam相关备份
-x
innoDB相关备份
mysqldump -uroot -A -F -E -R
备份
mysqldump -A -F --single-transetciong --master -data=2 |gzip > /backup/all -`date +%F·.sql.gz
还原
停止数据库访问(加锁) 从完全备份中,找到二进制位置
grep '-- change master to' /backup
xtrabackup用法
1 备份;对数据库做完全或增量备份 2 预制板;还原前,先对备份的数据,整理至一个临时目录
3 还原(复制);复制会数据库目录中
新版xtrabackup备份及还原
1 完全备份;xtrabackup -uroot -p123 --backup --target-dir=/backup/base
2 修改数据
3 第一次增量备份 xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base
4 第二次修改数据
5 第二次增量 xtrabackup --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
6 scp -r /backup/* 目标主机;/backup/
#备份过程生成三个备份目录
/backup/{base,inc1;inc2}
还原过程
mysql集群
分区
实现mysql主从复制配置
启动二进制文件
[mysqld]配置一个唯一ID号server_id=#
创建有复制权限的用户帐号
grant replication slave on . to 'repluser'@HOST' INDENTIFIED BY 'replpas''
节点配置 1启动中继日志 [mysqld] server_id=# read_only=on relay_log=relay-log
relay_log_index=relay-log.index
2 使用复制权限的用户帐号连接至主服务器,并启动复制线程
CHANGE MASTER TO MASTER_HOST='host', MASTER_USER='repluser',
MASTER_PASSWORD='replpass', MASTER_LOG_FILE=' mariadb-bin.xxxxxx',
MASTER_LOG_POS=#;
START SLAVE [IO_THREAD|SQL_THREAD];
主从复制相关 限制从服务器为只读 read_only=ON 对super权限用户无效
2 在从节点清楚信息 以下都需要先STOP SLAVE
RESET SLAVE 从服务器清楚master.info relay-log.info,
11.29
主从复制
mysql复制加密
主服务器开启SSL,配置证书私钥路径
[mysqld]
log-bin
server_id=1
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/master.crt
ssl-key=/etc/my.cnf.d/ssl/master.key
需要修改权限chown -R mysql.mysql
证书生成openssl req -new -x509 -key cakey.pem --out cacert.pem -days 3650
GTID
change master to
mycat
keepalived+mycat+mysql keepalived+LVS+mycat+mysql
schema.xml server.xml
proxysql
slave节点需要设置read only=1 端口6033(对外服务) 6032
mysql高可用解决方案
MMM MHA
重点Galera Cluster