1、防止数据丢失的最有效的方法是什么?对于mysql数据库而言,如何创建数据副本?
最有效的方法就是定期对原始数据进行备份,创建原始数据的副本,当原始数据丢失时,利用副本恢复数据。
创建数据副本的方式有三种:
数据备份、使用二进制日志(数据丢失时,通过对完全备份进行二进制日志的重做,可以完成基于时间点或者操作点的恢复)、数据库复制。
2、什么是逻辑备份以及物理备份?什么是冷备份,温备份以及热备份?什么是完全备份以及增量备份?
逻辑备份:备份的是sql脚本文件,sql脚本中包含了大量的create或者insert语句,执行sql脚本实现数据库的恢复;备份的是指定的文本文件,里面的内容是数据库表的记录。
物理备份:备份的通常是二进制文件,通常不可编辑,例如数据库的各种文件
冷备份:停止数据库进行备份,基本不用
温备份:温备份允许mysql继续运行,但是在温备份期间会,flush tables with read lock,加读锁,mysql会将内存中的数据刷新到外存中,然后再锁定所有的数据库表,避免备份的过程中修改数据。
热备份:mysql运行过程中实现对数据表的备份,通常myisam使用mysqlhotcopy innodb引擎的表使用xtrabackup
完全备份:就是一个完整的数据备份,通常和热备份结合起来进行使用,恢复起来较为简单
增量备份:指的是在完整备份的基础上对更新的数据进行备份
3、mysql提供哪些工具或者命令实现逻辑备份与恢复
Select......into.....outfile... Mysqldump
Load data infile mysqlimport
4、如何使用mysqldump备份数据库?如何使用这种方式恢复数据库?这种备份方式属于哪一种备份?
--default-character-set=utf8 指定备份文件字符集
Myisam表备份为了保证数据一致性,建议加上‘-l’或者--lock-tables 表示的是为数据库中的备份的某个表加读锁。‘-x’或者--lock-all-tables如果需要为备份所有数据的所有表加读锁 添加这个参数
Innodb表 加上--single-transaction 将整个备份过程封装在一个事务,实现数据的完整一致性。
注意:--single-transacton 不能和-l -x同时使用,如果备份的数据库同时有myisam表和innodb表 使用-l就行了,原因是innodb支持表级读锁
-d或者--no-data仅仅备份表结构
-R或者--routines 可以备份存储过程以及函数
-E或者--events可以备份数据库事件
--triggers可以备份触发器
Mysqldump目前还不能备份视图
--master-data=1 可以备份当前二进制日志以及偏移量信息
--all-database 备份全库
Mysqldump备份方式属于逻辑备份
5、物理备份myisam表时需要备份哪些文件?物理备份innodb表时需要备份哪些文件?
Myisam:frm文件 MYD 文件 MYI文件
Innodb:表空间文件(独立表空间、共享表空间)、frn文件、事务日志文件(ib_logfile0 ib_logfile1)
可以使用xtrabackup工具对innodb进行物理热备
6、简单描述MySQL复制的实现原理
Mysql复制基于二进制日志机制,就是将master上二进制日志异步复制到slave上进行还原。
7、简单描述MySQL复制的实现过程
Master将更新的事件记录到二进制日志中 binlog
Slave上io线程读取master上的二进制日志到中继日志中 relay-log
Slave重做中继日志中的事件,还原数据到从服务器
8、为了实现myql复制,需要在主服务器上进行哪些配置,执行哪些命令?从服务器的配置?
首先保证最好主从服务器是用的是相同的mysql版本
在主服务器上创建复制账户,授予replication slave权限
比如:grant replication slave on *.* to ‘repl’@’ip’ identified by ‘passwd’;
[mysqld]
Log-bin
Server-id=1
Innodb_flush_log_at_commit=1
Sync_binlog=1
Skip_networking=0
将主服务器的数据复制到从服务器
先在主服务器上加读锁
Flush tables with read lock;
Show master status;获取主服务器当前的二进制日志文件和偏移位置
最后unlock tables解锁
从服务器:
[mysqld]
Server_id =2
Log-bin
mysql> change master to
-> master_host='',
-> master_post='',
-> master_user='',
-> master_password='',
-> master_log_file='',
-> master_log_pos='';
9、MySQL复制过程中,主服务器涉及哪些线程?从服务器涉及哪些线程?
Mysql复制涉及3个线程 ,其中binlog dump线程运行在主服务器上,IO和SQL线程运行在从服务器上。
主服务器上的binlog dump线程按照从服务器请求的二进制日志名和偏移量将更新的数据发到从服务器上
IO线程会连接到主服务器上,读取主服务器上的binlog dump线程发送的二进制日志信息,并且将这些信息写入中继日志relay-log,sql线程用于读取中继日志并且执行中继日志中的更新语句
10、与MySQL复制相关的文件有哪些?这些文件的用途是什么?
Mater.info文件 该文件存在从服务器上,存放了主服务器的相关信息,复制账户及密码,主服务器的ip地址,mysql的端口号,当前二进制日志名和偏移量
relay-log文件 flush logs刷新日志的时候,会创建新的relay-log文件
relay-log-index 中继日志索引文件 存的是中继日志的文件清单,该索引文件记录了所有中继日志文件的绝对路径
relay-log-info 存储的是中继日志文件信息和主服务器的二进制日志信息