Skip to content

Commit

Permalink
change format
Browse files Browse the repository at this point in the history
  • Loading branch information
yanghj7425 committed Aug 26, 2019
1 parent cd0f261 commit e7acb2f
Show file tree
Hide file tree
Showing 12 changed files with 408 additions and 216 deletions.
117 changes: 63 additions & 54 deletions database/mysql/mysqldump.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
# 1. mysqldump

<!-- TOC -->

- [1. mysqldump](#1-mysqldump)
- [1.1. 调用语法](#11-调用语法)
- [1.2. 选项语法](#12-选项语法)
- [1.2.1. mysqldump 选项](#121-mysqldump-选项)
- [1.1. 性能和可扩展性的注意事项](#11-性能和可扩展性的注意事项)
- [1.2. 调用语法](#12-调用语法)
- [1.3. 选项语法](#13-选项语法)
- [1.3.1. mysqldump 选项](#131-mysqldump-选项)

<!-- /TOC -->

mysqldump 要求对需要 dump 的表有查询权限,对视图有 show view 权限,对应的触发器有 TRIGGER 权限并且如果没有使用 `--single-transaction` 选项 则需要使用 `LOCK TABLES`。确保拥有操作描述里要的其它权限。

为了加载 dump 文件,你必须拥有它包含的执行语句的权限。 比如当一个对象被创建的时候需要 `CREATE` 权限。
Expand All @@ -15,74 +18,80 @@ mysqldump 输出可以包含 `ALTER DATABASE` 语句,它可以改变数据库
为了加载 dump 文件包含的这些语句,需要数据库的 `ALTER` 权限。

- 注意:

一个 dump 模式是使用 PowerShell 在 Windows 用重定向来创建一个文件,这个文件是 `UTF-16` 编码:
- `shell> mysqldump [options] > dump.sql`


- `shell> mysqldump [options] > dump.sql`

然而,`UTF-16` 不能用于来作为一个连接字符集([不允许的客户端字符集](https://dev.mysql.com/doc/refman/8.0/en/charset-connection.html#charset-connection-impermissible-client-charset]))。所以 dump 文件不能正确加载,为了解决这个问题,使用 `--result-file` 选项,这会创建一个 ASCII 格式的文件:
- `shell> mysqldump [options] --result-file=dump.sql`

## 性能和可扩展性的注意事项
mysqldump 的优势包括在重新存储之前可以方便和灵活的查看甚至是编辑输出。你可以克隆数据库对一些开发或者 DBA 的工作,或者一个已经存在的数据库对产生的细微的变化测试。它不是一个用于快速和灵活备份大量数据的解决方案。对于大量的数据,甚至备份时间是合理的,但是恢复数据也可能非常慢,因为需要重放SQL语句调用磁盘 I/O 插入、创建索引等等。
- `shell> mysqldump [options] --result-file=dump.sql`

## 1.1. 性能和可扩展性的注意事项

对于大数据的备份和恢复,更推荐的是的*物理备份*。复制数据文件用原来的格式可以快速的恢复:
- 如果你的表主要是 innodb 表,或者你主要使用的是 innodb 和 MyISAM 表,考虑使用 MySQL Enterprise Backup (mysql 企业级备份产品),`mysqlbackup` 命令。它以最小的中断对 innodb 提供最好的备份性能;它也可从 MyISAM 或者其它的存储引擎备份其他表;它也提供了大量方便的选项来适配不同的备份场景。详情查看[MySQL Enterprise Backup](https://dev.mysql.com/doc/refman/8.0/en/mysql-enterprise-backup.html).
mysqldump 的优势包括在重新存储之前可以方便和灵活的查看甚至是编辑输出。你可以克隆数据库对一些开发或者 DBA 的工作,或者一个已经存在的数据库对产生的细微的变化测试。它不是一个用于快速和灵活备份大量数据的解决方案。对于大量的数据,甚至备份时间是合理的,但是恢复数据也可能非常慢,因为需要重放 SQL 语句调用磁盘 I/O 插入、创建索引等等。

对于大数据的备份和恢复,更推荐的是的*物理备份*。复制数据文件用原来的格式可以快速的恢复:

- 如果你的表主要是 innodb 表,或者你主要使用的是 innodb 和 MyISAM 表,考虑使用 MySQL Enterprise Backup (mysql 企业级备份产品),`mysqlbackup` 命令。它以最小的中断对 innodb 提供最好的备份性能;它也可从 MyISAM 或者其它的存储引擎备份其他表;它也提供了大量方便的选项来适配不同的备份场景。详情查看[MySQL Enterprise Backup](https://dev.mysql.com/doc/refman/8.0/en/mysql-enterprise-backup.html).


mysqldump 可以一行一行的检索 dump 表的内容,也可以从一个表检索出所有内容在 dump 之前把他存在内存里面。缓冲在内存里面有一个问题如果你正在导出的表比较大。使用 `--quick` 选项(或者`--opt`,它允许 `--quick`)。 `--opt``--quick`) 选项是默认允许的,所以如果要使用缓冲在内存的话可以使用 `--skip-quick`选项。

如果使用的是最近的 mysqldump 版本产生的 dump 文件去一个非常老版本的 MySQL 服务器重新加载,使用 `--skip-opt` 选项代替 `--opt` 或者 `--extended-insert` 选项。

其它关于 mysqldump 额外的信息看,[using-mysqldump](https://dev.mysql.com/doc/refman/8.0/en/using-mysqldump.html)

## 1.1. 调用语法
## 1.2. 调用语法

有大概三种使用 mysqldump 的方式
- 按顺序导出一个或者多个表的集合

- 按顺序导出一个或者多个表的集合
- `shell> mysqldump [options] db_name [tbl_name ...]`
- 导出一个或者多个数据库集合
- `shell> mysqldump [options] --databases db_name ...`
- `shell> mysqldump [options] --databases db_name ...`
- 导出整个 MySQL 服务器
- `mysqldump [options] --all-databases`
- 导出整个数据库,不需要表名在数据库名后面,或者使用`--databases`/`--all-databases ` 选项。
为了列出你的 mysqldump 版本支持的选项,可以使用 `mysqldump --help`
- 导出整个数据库,不需要表名在数据库名后面,或者使用`--databases`/`--all-databases` 选项。
为了列出你的 mysqldump 版本支持的选项,可以使用 `mysqldump --help`

## 1.3. 选项语法

## 1.2. 选项语法
mysqldump 支持下面的选项,这些可以在命令行 或者`[mysqldump]``[client]`组的 option 文件指定。关于更多的 MySQL 程序使用 option 文件的信息,查看[option-files](https://dev.mysql.com/doc/refman/8.0/en/option-files.html)

### 1.3.1. mysqldump 选项

### 1.2.1. mysqldump 选项

| Option Name | Description |Introduced |Deprecated|Removed|
|:------|:-------|:----|:-------|:------|
|--add-drop-database|在每一个 CREATE DATABASE 语句之前添加 DROP DATABASE 语句|
|--add-drop-table| 在每一个 CREATE TABLE 语句之前添加 DROP TABLE 语句|
|--add-drop-trigger|在每一个 CREATE TRIGGER 语句之前添加 DROP TRIGGER 语句|
|--add-locks| 用 LOCK TABLES 和 UNLOCK TABLES 包围 dump 中的每一个表|
|--all-databases|导出所有表的所有库|
|--allow-keywords|允许用他的关键字创建列|
|--apply-slave-statements| 在 CHANGE MASTER 语句之前包含 STOP SLAVE,在输出末尾添加 START SLAVE|
|--bind-address| 限制特定的网络接口来连接 MySQL 服务器|
|--character-sets-dir| 字符集安装的目录|
|--column-statistics| 写一个 ANALYZE TABLE 语句来产生统计直方图| 8.0.2|
|--comments| 添加注释到 dump 文件|
|--compact| 产生更紧凑的输出|
|--compatible| 产生更加兼容其它数据库系统或更老的 MySQL 服务器|
|--complete-insert| 使用包含列明的完整 INSERT 语句|
|--compress| 压缩所有在客户端和服务器之间发送的信息| |8.0.18|
|--compression-algorithms| 在服务器之间允许的压缩算法|8.0.18|
|--create-options| 在 CREATE TABLE 语句中包含 MySQL 的特殊表|
|--databases| 将所有的参数名称解释为数据库的名称|
|--debug|写入 debug 日志|
|--debug-check|程序退出的时候打印 debuging 信息|
|--debug-info|程序退出时打印 debug 信息: 内存、CPU|
|--default-auth| 使用的认证插件|
|--default-character-set| 指定默认字符集|
|--default-extra-file|常规的 option 文件外,读取另外的 option 文件的名称|
|--default-file|读取确切的 option 文件|
|--default-group-suffix| Option 组的后缀值|
|--delete-master-logs|在一个 master 服务器上复制的时候,在 dump 操作执行之后删除二进制日志|
|--disable-keys|对每张表,用 disable keys 和 enable keys 围绕 INSERT 语句|
|--dump-date|包含导出日期例如 "Dump completed on" 注释,如果 --comments 被提供|
|--dump-slave|包含 CHANGE MASTER 语句被列在二进制日志的候选的 slave 的 master 列表中|
|--enable-cleartext-plugin| 启用明文验证插件|
|--events|从导出的数据库导出事件|
| Option Name | Description | Introduced | Deprecated | Removed |
| :------------------------ | :--------------------------------------------------------------------- | :--------- | :--------- | :------ |
| --add-drop-database | 在每一个 CREATE DATABASE 语句之前添加 DROP DATABASE 语句 |
| --add-drop-table | 在每一个 CREATE TABLE 语句之前添加 DROP TABLE 语句 |
| --add-drop-trigger | 在每一个 CREATE TRIGGER 语句之前添加 DROP TRIGGER 语句 |
| --add-locks | 用 LOCK TABLES 和 UNLOCK TABLES 包围 dump 中的每一个表 |
| --all-databases | 导出所有表的所有库 |
| --allow-keywords | 允许用他的关键字创建列 |
| --apply-slave-statements | 在 CHANGE MASTER 语句之前包含 STOP SLAVE,在输出末尾添加 START SLAVE |
| --bind-address | 限制特定的网络接口来连接 MySQL 服务器 |
| --character-sets-dir | 字符集安装的目录 |
| --column-statistics | 写一个 ANALYZE TABLE 语句来产生统计直方图 | 8.0.2 |
| --comments | 添加注释到 dump 文件 |
| --compact | 产生更紧凑的输出 |
| --compatible | 产生更加兼容其它数据库系统或更老的 MySQL 服务器 |
| --complete-insert | 使用包含列明的完整 INSERT 语句 |
| --compress | 压缩所有在客户端和服务器之间发送的信息 | | 8.0.18 |
| --compression-algorithms | 在服务器之间允许的压缩算法 | 8.0.18 |
| --create-options | 在 CREATE TABLE  语句中包含 MySQL 的特殊表 |
| --databases | 将所有的参数名称解释为数据库的名称 |
| --debug | 写入 debug 日志 |
| --debug-check | 程序退出的时候打印 debuging 信息 |
| --debug-info | 程序退出时打印 debug 信息: 内存、CPU |
| --default-auth | 使用的认证插件 |
| --default-character-set | 指定默认字符集 |
| --default-extra-file | 常规的 option 文件外,读取另外的 option 文件的名称 |
| --default-file | 读取确切的 option 文件 |
| --default-group-suffix | Option 组的后缀值 |
| --delete-master-logs | 在一个 master 服务器上复制的时候,在 dump 操作执行之后删除二进制日志 |
| --disable-keys | 对每张表,用 disable keys 和 enable keys 围绕 INSERT 语句 |
| --dump-date | 包含导出日期例如 "Dump completed on" 注释,如果 --comments 被提供 |
| --dump-slave | 包含 CHANGE MASTER 语句被列在二进制日志的候选的 slave 的 master 列表中 |
| --enable-cleartext-plugin | 启用明文验证插件 |
| --events | 从导出的数据库导出事件 |
47 changes: 33 additions & 14 deletions java/thinkInJava/chapter10.md → java/thinkInJava/10.内部类.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,29 @@
# <center> 第 10 章 内部类 </center>
# 1. 第 10 章 内部类

## 链接到外部类
<!-- TOC -->

- [1. 第 10 章 内部类](#1-第-10-章-内部类)
- [1.1. 链接到外部类](#11-链接到外部类)
- [1.2. 使用 .this 和 .new](#12-使用-this-和-new)
- [1.3. 内部类向上转型](#13-内部类向上转型)
- [1.4. 在方法和作用域内的内部类](#14-在方法和作用域内的内部类)
- [1.5. 匿名内部类](#15-匿名内部类)
- [1.6. 嵌套内部类](#16-嵌套内部类)
- [1.6.1. 接口内部的类](#161-接口内部的类)
- [1.7. 为什么需要内部类](#17-为什么需要内部类)
- [1.7.1. 闭包与回调](#171-闭包与回调)
- [1.7.2. 内部类和框架控制](#172-内部类和框架控制)
- [1.8. 内部类的继承](#18-内部类的继承)
- [1.9. 内部类可以被覆盖吗?](#19-内部类可以被覆盖吗)
- [1.10. 局部内部类](#110-局部内部类)

<!-- /TOC -->

## 1.1. 链接到外部类

内部类自动拥有对外围类所有成员的访问权。当生成一个内部类的对象时,此对象与制造他的*外围对象*指甲就有了一种联系,所有他能访问其外围对象的所有成员,而*不需要*任何特殊条件。

## 使用 .this 和 .new
## 1.2. 使用 .this 和 .new

- .this : 如果需要在内部类中生成对外部类对象的引用。可以使用外部类的名字后面紧跟原点和 this。

Expand Down Expand Up @@ -35,15 +54,15 @@ public class DotThis {
}
```

## 内部类向上转型
## 1.3. 内部类向上转型

内部类向上转型为基类,尤其是转型为一个接口的时候,内部类就有了用武之地。

## 在方法和作用域内的内部类
## 1.4. 在方法和作用域内的内部类

- 作用域外不可见

## 匿名内部类
## 1.5. 匿名内部类

- 实现一个接口实现类

Expand Down Expand Up @@ -107,15 +126,15 @@ public class DotThis {

```

## 嵌套内部类
## 1.6. 嵌套内部类

如果不需要内部类对象与其外围类之间有联系,那可以把内部类声明为 static 的,这统筹称为**嵌套类**

- 当内部类是 static
1. 要创建嵌套类对象,并不需要其外围类对象。
2. 不能从嵌套类中的对象中访问非静态的外围类对象。

### 接口内部的类
### 1.6.1. 接口内部的类

正常情况下,不能在接口内部放置任何代码,但嵌套类可以做为接口的一部分。

Expand Down Expand Up @@ -144,7 +163,7 @@ public class DotThis {
}
```

## 为什么需要内部类
## 1.7. 为什么需要内部类

内部类继承自某个类或者实现某个接口,内部类的代码操作创建它的外围类的对象。<br><br>
内部类必须回答的问题:
Expand All @@ -156,19 +175,19 @@ public class DotThis {
3. 内部类最吸引人的原因:
- 每个内部类都能独立继承一个接口,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。

### 闭包与回调
### 1.7.1. 闭包与回调

- P<sub>205</sub>
- 闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建他的所用域。 内部类是面向对象的闭包。

### 内部类和框架控制
### 1.7.2. 内部类和框架控制

- P<sub>207</sub>

1. 控制框架的完整实现是有单个的类创建的,从而是的细节被封装起来。内部类用来表示解决问题所必须的各种不同的 action()。
2. 内部类能容易的访问外围类的任意成员,所以可以避免这种实现变得笨拙。

## 内部类的继承
## 1.8. 内部类的继承

- 内部类的构造器必须链接到指向外围类对象的引用

Expand All @@ -194,11 +213,11 @@ public class InheritInner extends DotThis.Inner {
}
```

## 内部类可以被覆盖吗?
## 1.9. 内部类可以被覆盖吗?

继承外围类,然后重新定义此内部类,但是“覆盖”外围类的一个方法,其实并不起什么作用。

## 局部内部类
## 1.10. 局部内部类

- 局部内部类不能访问说明符,因为他不是外围类的一部分;但是它可以访问当前代码块内的常量,以及外围类的所有成员。
- 区别: 使用局部内部类有一个 命名构造器,匿名内部类没有具名构造器。
Loading

0 comments on commit e7acb2f

Please sign in to comment.