好的备份方法和策略,能让数据库更加高效和安全。
数据库的备份分类:
逻辑备份和物理备份
备份时需要考虑的因素:
1 确定备份的引擎是事务引擎还是非事务引擎,两种引擎的备份方式是不一样的
2 确认是全量备份还是增量备份。恢复的时间的查表
3 可以考虑做异地复制的方式备份,但是复制不能代替备份
4 要定期做备份,备份周期需要考虑
5 打开log-bin
6 经常做备份恢复测试,确认备份是有效的,并可以恢复的。
逻辑备份
1 备份方式 mysqldump [options] dbname [tables]
2 备份多个数据库mysqldump [options] --dtabases dbname1 dbname2
3 备份所有数据库 mysqldump --all-database
恢复
mysql -uxxx -pxxx dbname < xx.dump
基于时间点的恢复
1 mysqlbinglog --stop-date='2016-11-11 11:11:11' xxxx.dump | mysql -u xx -pxxx
跳过时间点的恢复
2 mysqlbinglog --start-date='2016-11-11 11:11:11' xxxx.dump | mysql -u xx -pxxx
基于位置点的恢复
mysqlbinglog --stop--position='123314' xxxx.dump | mysql -u xx -pxxx
物理备份和恢复
物理备份又分为冷备份和热备份,它相对于逻辑备份的特点是:备份和恢复的速度更快,原理都是基于cp的
冷备份
备份操作:
停掉mysql服务,在操作系统级别备份mysql的数据文件和日志文件到备份目录
恢复操作:
停掉mysql服务,在操作系统级别恢复mysql的数据库文件,然后重启mysql服务,使用mysqlbinlog工具恢复备份以来的所有binglog
热备份
myisam 引擎
1 mysqlhotcopy工具
2 手工锁表(flush tables for read;)然后cp文件
innodb 引擎
ibbackup等,采用第三方备份工具
表的导出
1 select ... into outfile
2 mysqldump 导出数据为文本
表的导入
1 load data infile ...
2 mysqlimport
mysql的权限管理的原理:
1 用户的身份认证
2 对用户操作权限的管理
mysql的权限管理具体操作
使用grant创建权限
使用show grants for xx@host查看权限
使用grant更改权限
使用revoke回收权限
删除账号 drop user xxx
mysql安全问题
1 严格控制操作系统账号和权限
锁定mysql用户
任何用户都采用独立的账户登录
mysql用户目录下,除了数据文件目录,其他文件和目录属主都改为root
2 尽量避免以root权限运行mysql
3 防止DNS欺骗
4 删除匿名账户
5 给root账户设置口令
6 设置安全密码
7 只授权必须的权限
8 除了root任何用户不应该有user表权限
9 不要把file,process,super权限授权给管理员之外的账户
10 load data local可能带来安全问题,禁用它
11 meger可能存在安全隐患
12 drop table 不会收回权限
13 使用ssl
14 给所有用户加上ip限制
15 revoke命令可能有漏洞
16 选择合适的密码生成器
17 禁用一些命令
通过binlog把日志复制到从服务器,从服务器继续执行,保持主从同步。
mysql的主从支持链式结构
复制的优点:
1 如果主出现问题,可以快速的切换到从
2 从上可以读,降低主的访问压力
3 从上可以执行备份,不会影响主服务器的服务
了解配置从服务器的配置
这个可以百度一下
主要复制启动选项
log-slave-updates 从库上的更新操作是否写二进制日孩子
master-connect-retry 主从丢失连接时的重试时间
read-only,从服务器只接受超级用户的更新操作
指定复制的数据库或者表忽略一些库或者表
slave-skip-errors 忽略一些错误
日常管理维护
查看从服务器状态
show slave status;
主从同步的维护
常用的办法是在负载低的时候阻塞主服务器,强制更新主从同步
从服务器出现错误的处理
可以忽略主服务器的错误或者更新失败语句
使用blog时可以使用 max_allowed_packet
多主复制时的自增长变量可能产生冲突多台主对应一台从
查看复制进度
show processlist;
切换到从服务器大致步骤
1 停止从服务器 2 将从设置为主 3 将主设置成从