1.下载最新的mysql安装包
docker pull mysql
下载最新的安装包
输入
docker images --查看是否下载成功
2.创建文件目录,挂载mysql文件
创建文件夹:data、conf、logs用于mysql数据库文件和日志文件以及配置文件挂载。
建议master和slave分开的
mkdir -p /java/docker/mysql/master/data
mkdir -p /java/docker/mysql/master/conf
mkdir -p /java/docker/mysql/master/logs
mkdir -p /java/docker/mysql/slave/data
mkdir -p /java/docker/mysql/slave/conf
mkdir -p /java/docker/mysql/slave/logs
cd /java/docker/mysql/master/conf
在conf下创建master.cnf文件
# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# The MySQL Community Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp
log-bin = mysql-bin
server-id = 1
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
再创建slave.cnf文件,放在slave的conf目录下,注意server-id不能一样
3.挂载配置文件
docker run --name mastermysql -v /java/docker/mysql/master/data:/var/lib/mysql -v /java/docker/mysql/master/conf:/etc/mysql/conf.d -v /java/docker/mysql/master/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=admin -p 5306:3306 -d mysql
docker run --name slavemysql -v /java/docker/mysql/slave/data:/var/lib/mysql -v /java/docker/mysql/slave/conf:/etc/mysql/conf.d -v /java/docker/mysql/slave/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=admin -p 5307:3306 -d mysql
解释下:-d 是后台守护进程运行mysql -p 是外部访问映射的端口 3306是docker容器默认的端口。和服务器端口无关
创建成功
4.进入主库master
docker exec -it 6265c9f58177 /bin/bash
-it 容器id --使用docker ps -a 查看容器id
mysql -uroot -padmin
CREATE USER 'chase'@'%' IDENTIFIED BY '123456'; 创建一个用户
GRANT ALL ON *.* TO 'chase'@'%'; 授权
进入到mysql 命令show master status;查看部分信息。
File 和Position 后面做主从要用到
exit退出mysql,exit退出容器
docker exec -it 40a4f0d9abb7 /bin/bash
mysql -uroot -padmin
change master to master_host='45.243.86.142', master_port=5306,master_user='chase',master_password='chase', master_log_file='binlog.000002',master_log_pos=156;
master_host:主库的IP地址/服务器地址
master_port:主库的端口
master_user:主库开放出来的用户
master_password:用户的密码
master_log_file:主库的日志文件,二进制日志文件,进行同步的。就是上面show master status 里面的File
master_log_pos:上面show master status 里面的Position
start slave;
show slave status\G
然后测试,navicat连接两个数据库,在主库创建表,从库是否会同步
测试成功