Mysql认识(1)
备注1:Mysql主从模式下从库的关键的两个线程:
1)I/O线程(I/O thread) slave_io 负责从主库读bin-log日志并写到本地relay-log日志文件中。
2)SQL线程(SQL thread) slave_sql 负责读本地relay-log日志
注:Mysql不能同步的原因:
1、网络问题,如网络不通。通过ping来检查,是否可连通。
2、防火墙问题,通过ping能ping通,但是 I/O Thread错误,可能就是防火墙问题,检查防火墙或通过mysql -h检查
3、主库与从库数据不一致,如主库有某表但从库上无此表,那么sql thread处理时,错误导致不能同步,通过show slave status检查。
4、从库配置主库问题,通过show slave status及查看/var/lib/mysql/master.info
5、从库 是否开启start slave,通过show slave status
备注2:mysqldump备份和恢复数据库,mysqldump会锁表操作。
mysqldump主库备份, --master-data记录当前备份数据库对应日志信息。
# mysqldump -uroot -p --all-databases > /allback.sql
# mysqldump -u root -p 密码 --master-data dbname1 > /dbname1.sql
# mysqldump -u root -p 密码 -B dbname1 dbname2 > /partdb.sql
mysqldump恢复数据库
# mysql -u root -p 密码 dbname1 < /allback.sql
# mysql -u root -p 密码 dbname1 < /dbname1.sql
# mysql -u root -p 密码 < /partdb.sql
备注3:Mysql执行drop table时 innodb会维护一个全局锁,当drop完毕后锁才被释放。所以删除大文件表时不适用。
使用truncate(查网待写)
备注4:在Mysql数据库中每创建一张数据表(create table ……)就会在存储路径下生成一个与表名相同的 .frm文件。
.frm文件用于保存每个数据表的元数据信息,包括表结构的定义(如表中字段等定义)。
.frm文件与引擎无关,任何存储引擎都必须存在 .frm文件。
.frm文件可用来在数据库崩溃时恢复表结构。
备注5:xtrbackup与mysqldump比较:
1)mysqldump备份的优点:基于逻辑备份--》慢。恢复时需重建索引等。
-
-
- 备份和恢复简单,恢复时可以使用管道将它们输入mysql;
- 与存储引擎无关,因为是从MySQL服务器中提取数据而生成的;是SQL语句。
-
缺点:(本质是通过SQL语句生成的)
-
-
- 必须有数据库服务器完成逻辑工作,需要更多地cpu周期。
- 逻辑备份还原速度慢:需要MySQL加载和解释语句、转化存储格式、重建引擎。
- 由于mysqldump是锁表操作的,所以不适合热备份。mysqldump默认是lock-tables的。
-
2)xtrbackup备份的优点:本质是基于文件的物理备份。
-
-
- 基于文件的物理备份。
- 数据备份过程中不会中断事务的处理(热备份),无需锁表(行锁表)。
- 可以快速可靠的完成数据备份(复制数据文件和追踪事务日志)。
- 恢复起来会更快(不需要执行任何的mysql语句,不需要构建索引,innoDB表无需完全缓存到内存)。
- 可以流传将备份传输到另外一台机器,使用--stream参数。
- 在不增加服务器负载的情况备份数据。
-
缺点:
-
-
- 文件大
- 不总是可以跨平台、操作系统和MySQL版本
-
注意:xtrbackup在备份时执行FLUSH TABLES WITH READ LOCK(FTWRL),取得一致性位点,然后开始备份非InnoDB文件,在拷贝非InnoDB文件的过程当中,数据库处于全局只读状态。innobackupex收到redo.log备份完成后,就进行解锁操作,执行:UNLOCK TABLES;
参考:https://www.cnblogs.com/bigdatasafe/p/11576596.html
备注6:关于脏读、不可重复读 和 幻读
- 脏读
事务A读取了事务B中尚未提交的数据。如果事务B回滚,则A读取使用了错误的数据。
【一个事物在读的时候,禁止读取未提交的事务】
- 不可重复读
不可重复读是指在一个事务范围内多次查询却返回了不同的数据值,这是由于存在查询间隔,被另一个事务修改并提交了。
【一个事物在读的时候,禁止任何事务写】
- 幻读
在事务A多次读取过程中,事务B对数据进行了新增操作,导致事务A多次读取的数据不一致。
【一个事物加上表级锁,禁止任何操作的并发】
小结:
脏读是读取了尚未提交的数据,不可重复读是读取了不停更新的数据(修改),幻读是指读取了不停更新的数据(新增)。
备注7:关于事务隔离级别(目的:避免脏读,不可重复读,幻读)
- 读未提交:一个事务可以读到另一个事务尚未提交的数据。也就是脏读,避免脏读的方式:读提交
- 读提交:一个事务要等另一个事务提交后才能读取数据。 但会导致一个事务中相同查询出现不同的结果。也就是不可重复读。避免不可重复读的方式:重复读
- 重复读(RR,MySQL默认级别):就是在开始读取数据时,不允许修改操作。 但会导致由于允许insert操作导致的事务结果出现不同。也就是幻读,避免幻读的方式:序列化
- 序列化:序列化使事务串行顺序执行,但会大大降低并发性能。
浙公网安备 33010602011771号