MySQL技术培训 - 第三天

Sharing of MySQL – Chukong MySQL 数据库培训 – 第三天

  1. 常见数据库备份方式 – 主从备份

    a. 冷备份: 先关闭数据库, copy data file
    b. mysqldump: – hot copy
    c. xtrabackup: – hot copy
    d. master/slave: 实时, 基于 a-c 实现

其中 a-c 只能恢复到某一时间点, d 为主从实时备份(略有延时,但是动态自动进行同步备份的方案)

  1. 冷备份准备:

停用 DB:
mysqladmin -u root -p shutdown -S /tmp/mysql.socket

拷贝文件:
scp …..

修改相关设置:
目录权限: chown -R mysql:mysql /data/mysql/配置文件: 目标机器 IP, server_id, basedir, datadir

启动 mysql:
/opt/soft/percona/bin/mysqld_safe –defaults-file=/data/mysql/my.cnf –basedir=/opt/soft/percona/ –datadir=/data/mysql/ –user=mysql &

  1. mysqldump 方案:

开启 bin-log 日志, 默认 lock-tables 为真(意味执行备份时会进行 table 锁直到备份结束), 优点是无需停数据库, 执行方便
[mysqld]log-bin = /data/mysql/mysql-bin

mysqldump -h HOST -P PORT -u root -p PASSWD –default-charactor-set=utf8 –master-data DBNAME | gzip > DBNAME.sql.gz

其中出现中文信息时 使用 –default-charactor-set 尤为重要.

该语句不会备份索引.

记录备份的 binlog 的 MASTER_LOG_POS=… MASTER_LOG_FILE=…

恢复是采用语句 mysql < DBNAME.sql

更多信息参考 mysqldump –help

  1. Xtrabackup 备份

基于 InnoDB 的 crash-recovery 原理, 备份时不锁表, 逐页(16k 每页)进行数据拷贝, 同时拷贝备份进程中变化的日志页

开启 xtrabackup_log->copy .ibd & ibdata1 文件->FlushTableSWithReadLock->copy .frm, .myd, .myi 和 misc 文件->获取 bin-log 位置->UnlockTable->stop & copy xtrabackup_log

回复时应用日志回复 DB

优点:速度快; 缺点拷贝 bin-log 占用大量空间.

基础前题: 开启 Bin-log; 配置相应数据参数
[mysqld]
log-bin = /data/mysql/mysql-bin
basedir=/opt/soft/perconadatadir=/data/mysql

备份操作:
innobackupex –user=USER –password=PWD –defaults-file=/data/mysql/my.cnf /data0/backup/mysql > /tmp/mysqlbackup.log

恢复操作:
innobackupex –apply-log –user=USER –password=PWD –defaults-file=/data/mysql/my.conf /data0/backup/mysql

注: InnoDB 类型数据库不可以只通过直接拷贝数据文件进行备份, 要涉及事务相关的判断等信息.

  1. Master-Slave 方案:

实现原理:
a. Master 开启 bin-log 日志记录每次 DML 操作,写入磁盘文件.
b. Slave 开启子线程 A 读取 Master 的 bin-log 文件, 将同步标记信息写入自己的 Replay log, 子线程 B 读取该日志将其解析成 SQL 语句写入 Slave 数据库, 同时产生 Slave 数据库的 bin-log

实现方案: 冷备份/mysqldump/Xtrabackup + binlog

修改数据库配置文件中的/etc/my.cnf 中的 server-id 值

mysql 客户端操作:
主服务器授权, 查看 Master 状态, 客户端执行 change master to …, 启用 slave

验证主从复制正确性:
show slave status
抽样对比记录条数
mysql 日志是否有异常

主从切换方法:
a. 先确认同步完成, 停掉所有操作数据库的应用, 在 master 执行 show processlist, 如果提示 “master 已经发送全部 bin-log 到 slave. 等待 binlog 更新”
b. 停掉从数据库 stop slave
c. change master to …

服务器监控:

端口, 运行时间, 连接数, sql 量, 慢查询, 磁盘, 内存, salve 同步情况 – 使用 zabbix 工具有较好界面管理

思考问题:
a. 主从数据进行读写分离时有延时, 应该如何处理?
b. key point: memcache 缓存, 分库分表(4kw 非关联 data 为上限)

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.