主要内容
- 利用docker进行主从配置,数据保存在容器外部,容器可任意删除数据不丢失
- 附带中文版配置,重点介绍几个常用需更改配置
- 对于大多数人其实没那么熟悉docker,只是用来本地模拟多机器学习使用。生产还是使用直接部署。
步骤
-
创建工作目录。 我的目录是
/etc/docker/mysql
。(如果是mac或者windows本机的docker,先确认映射的目录是否有权限) -
创建主数据库
-
创建
my-master.cnf
文件,拷贝下方的配置。 依据机器配置更改- 更改
innodb_buffer_pool_size
和innodb_buffer_pool_instances
- 更改
innodb_read_io_threads
和innodb_write_io_threads
,主从配置中,写多分配
- 更改
-
运行。
docker run -d -p 3306:3306 --name mysql-master --restart=always -v /etc/docker/mysql/my-master.cnf:/etc/my.cnf -v /etc/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
-
稍等几秒后连接数据库。
-
创建从库账号 slave1。
CREATE USER slave1 IDENTIFIED BY '123456'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave1'@'%'; FLUSH PRIVILEGES;
-
-
创建从库
-
cp my-master.cnf my-slave.cnf
-
修改配置文件
my-slave.cnf
- 更改
server-id
- 注释掉
log-bin = mysql-bin
,从库不需要开启binlog - 更改
innodb_buffer_pool_size
和innodb_buffer_pool_instances
- 更改
innodb_read_io_threads
和innodb_write_io_threads
- 更改
-
运行。
docker run -d -p 3307:3306 --name mysql-slave --restart=always -v /etc/docker/mysql/my-slave.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql
(从库不映射) -
查看主库IP。 线上环境可以直接知道,注意端口开放。 同机器docker搭建需要查看
docker inspect mysql-master
-
在主库执行
SHOW MASTER STATUS;
获取参数。 -
进入从库,执行类似
CHANGE MASTER TO MASTER_HOST='172.17.0.4', MASTER_USER='slave1', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=158;
-
启动从库
START SLAVE;
-
查看从库同步状态
SHOW SLAVE STATUS;
查看Slave_IO_Running
和Slave_SQL_Running
为Yes
-
-
测试
- 在主库创建数据库和表,从库也有相应增加。
- 值的注意的是,如果从库是在主库已经有数据之后再订阅,则从库不会补充数据。需要先数据迁移冷启动,这又是复杂的问题。
- 另外从库如果使用 root 去更改数据也是可以改成功的,会造成主从不一致。 服务中使用slave1只有读权限是OK的。