启动Master

docker run --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD="my-secret-pw" -v custom-path/master/conf:/etc/mysql/conf.d -v custom-path/master/data:/var/lib/mysql -d mysql

启动Slave

docker run --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD="my-secret-pw" -v custom-path/slave/conf:/etc/mysql/conf.d -v custom-path/slave/data:/var/lib/mysql -d mysql

修改master配置文件

cd custom-path/master/conf
touch master.cnf
vim master.cnf

加入以下内容

[mysqld]
log-bin=mysql-bin 
server-id=1

修改slave配置文件

cd custom-path/slave/conf
touch slave.cnf
vim slave.cnf

加入以下内容

[mysqld]
log-bin=mysql-bin 
server-id=2

重启MySQL容器

docker restart mysql-master
docker restart mysql-slave

主库创建复制账户

GRANT REPLICATION SLAVE ON *.* TO 'reply'@'192.168.2.103' IDENTIFIED BY '123456';

复制账户为: reply,指定从库的IP必须为: 192.168.2.103,复制密码为: 123456

获取主库file与position

SHOW MASTER STATUS;

配置从库连接主库

CHANGE MASTER TO 
MASTER_HOST='192.168.2.108', 
MASTER_PORT=3306, 
MASTER_USER='reply', 
MASTER_PASSWORD='123456', 
MASTER_LOG_FILE='mysql-bin.000001', 
MASTER_LOG_POS=898;

启动Slave线程开始同步

START SLAVE;

查看从库同步状态

SHOW SLAVE STATUS;

Cache-control 常见的参数

public

可以用缓存回应任何用户

private

只能用缓存回应先前请求该内容的那个用户

no-cache

no-cache 和字面的意思不同,事实上还是会缓存,只不过每次请求都需要去检验缓存是不是最新的,如果是最新的,请求会响应 304 状态码;不是最新的会响应 200 并更新缓存。

客户端从服务器请求数据经历如下基本步骤:
1 如果请求命中本地缓存则从本地缓存中获取一个对应资源的副本。
2 检查这个副本是否有效,是则直接返回,否则继续向服务器转发请求。
3 服务器接收到请求,然后判断资源是否变更,是则返回新内容,否则返回304,未变更。
4 客户端更新本地缓存。

no-cache的作用是:强制客户端跳过步骤2,直接向服务器发送请求。

no-store

不缓存

max-age

缓存的最大有效期。比如:

Cache-control: max-age=5

表示缓存的有效期为5秒,在5秒内再次访问该资源不会进行有效性校验(http 响应 304),直接响应 200 from cache。

max-stale

在缓存的最大有效期的基础上再延长一段时间。比如:

Cache-control: max-age=5; max-stale=5

标识缓存的有效期为5秒,但是在10秒内访问该资源都会使用缓存,不会再去进行有效性校验。

不同方式 Cache-control 的作用

打开新窗口

如果指定cache-control的值为private、no-cache,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,则在过期之前不会重复访问。

在地址栏回车

如果值为private,则只有第一次访问时会访问服务器,以后就不再访问。如果值为no-cache,那么每次都会访问。如果值为max-age,则在过期之前不会重复访问。

按后退按扭

如果值为private、max-age,则不会重访问;而如果为no-cache,则每次都重复访问。

按刷新按扭

无论为何值,都会重复访问。