1)从Docker官方下拉MySQL的image
docker search mysql
docker pull mysql
2)设置目录 --- 将MySQL数据保存到当前主机上
建立MySQL数据存储目录
mkdir -pv /Users/pintec/jay/db_test
建立主服务器的配置目录
mkdir -pv /Users/pintec/jay/db_test/mysql/101
建立从服务器的配置目录
mkdir -pv /Users/pintec/jay/db_test/mysql/102
3)设置主从服务器配置
vi /Users/pintec/jay/db_test/mysql/101/101.cnf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=101 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
- 1
- 2
- 3
vi /Users/pintec/jay/db_test/mysql/101/102.cnf
[mysqld]
log-bin=mysql-bin
server-id=102
4) 启动MySQL容器
//创建2个MySQL容器
docker create --name mysqlsrv101 -v /Users/pintec/jay/db_test/mysql/101:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 mysql
docker create --name mysqlsrv102 -v /Users/pintec/jay/db_test/mysql/102:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql
或指定数据保存到本地
docker create --name mysqlsrv101 -v /Users/pintec/jay/db_test/mysql101:/var/lib/mysql -v /Users/pintec/jay/db_test/mysql/101:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 mysql
docker create --name mysqlsrv102 -v /Users/pintec/jay/db_test/mysql102:/var/lib/mysql -v /Users/pintec/jay/db_test/mysql/102:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql
#根据容器名,启动容器
docker start mysqlsrv101
docker start mysqlsrv102
5)配置MySQL主从服务器
登录主服务器 3307,查询master状态,注意查出的Position(从服务器master_log_pos要用),授权用户:backup,密码:root
show master status;
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
GRANT REPLICATION SLAVE ON.* to 'backup'@'%' identified by 'root';
登录从服务器的3308,设置与主服务器相关的配置参数
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
change master to master_host='192.168.208.84', master_port=3307,master_user='backup',master_password='root',master_log_file='mysql-bin.000003',master_log_pos=154;
注意:
master_host为docker的地址不能写127.0.0.1
master_user是在主库创建的用户
master_log_pos是主库show master status;查询出的Position
Waiting for master to send event 就是成功了
Connecting to master 多半是连接不通
之后主库的修改都能同步到从库了
6)主服务器创建数据库,并创建数据
主服务器创建数据库jay_db1
执行SQL:
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`address` varchar(255) COLLATE utf8_bin DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
从服务器会自动复制db和内容