docker安装myql
为了方便,使用一台虚拟机,开启两个mysql,分别为3306和3307
拉取mysql镜像
docker pull mysql:5.7
创建配置文件
mkdir /usr/local/mysqlmaster
cd /usr/local/mysqlmaster
mkdir data conf
创建mysqld.cnf
打开配置文件
vim /usr/local/mysqlmaster/conf/mysqld.cnf
并添加以下内容
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-bin=master-bin
server-id=1
注:server-id为唯一标示,主从需开启log-bin,主要这两个参数即可,slave文件夹下配置一样需改一下server-id即可
创建容器并启动
mysql主机
docker run --name mysqlmaster -p 3306:3306 -v /usr/local/mysqlmaster/conf:/etc/mysql/mysql.conf.d -v /usr/local/mysqlmaster/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --privileged=true -d mysql:5.7
注:在启动后发现show master status未生效,并没有开启log-bin(二进制日志开启),原来是配置文件未生效,挂载配置文件路径应该是mysql.conf.d目录下,不应该挂载conf.d下,搞了一下午终于搞定,无论是增量备份还是主从复制,都是需要开启mysql-binlog日志,最好跟数据目录设置到不同的磁盘分区,可以降低io等待,提升性能;并且在磁盘故障的时候可以利用mysql-binlog恢复数据
mysql从机
docker run --name mysqlslave -p 3307:3306 -v /usr/local/mysqlslave/conf:/etc/mysql/mysql.conf.d -v /usr/local/mysqlslave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --privileged=true -d mysql:5.7
放行端口号并重新启动firewall
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=3307/tcp --permanent
firewall-cmd --reload
开启主从复制
进入容器内部并启动mysql
docker exec -it mysqlmaster mysql -uroot -p123456
创建用户
create user 'zcj'@'%' identified by '123456';
授权
grant replication slave on *.* to 'zcj'@'%';
刷新权限
flush privileges;
查看状态
show master status;
mysql从机
进入从器内部并登录mysql
docker exec -it mysqlslave mysql -uroot -p123456
执行主从
change master to master_host='192.168.0.103',master_port=3306,master_user='zcj',master_password='123456',master_log_file='master-bin.000002',master_log_pos=894;
注:master_host:master所在机器IP地址
master_log_file和master_log_pos通过master查看show master status查看
开启复制
start slave
注:stop slave;----停止主从
reset slave;—删除主从
查看主从是否配置成功
show slave status \G;
如果
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
说明主从成功
注:
如果是Slave_SQL_Running:no
stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
start slave;
show slave status\G
如果是slave_io_running:no
进入master,查看show master status\G ,发现和slave配置的不一致,进行修改