docker之MySQL主从复制

##MySQL主从复制 ###主服务器mysql

配置文件目录 mkdir /var/lib/mysql/master/conf.d 数据存储目录 mkdir var/lib/mysql/master/datasql

配置my.cnf文件 # cd /var/lib/mysql/master/conf.d # vim my.cnfdocker

[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL symbolic-links=0 log-bin = mysql-bin server-id = 1数据库

启动master容器:vim

docker run -it -p 3306:3306 --name master -v /var/lib/mysql/master/conf.d:/etc/mysql/conf.d -v /var/lib/mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

重启master容器bash

docker stop master slave
docker start master slave

进入master容器,设置mysql主从复制用户reader服务器

docker exec -it master /bin/bash
root@1e8e984a9a30:/# mysql -uroot –p123456(前面设置的密码MYSQL_ROOT_PASSWORD=123456)

<b>MySQL旧版赋权方法:</b>socket

GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; GRANT REPLICATION SLAVE ON . to 'reader'@'%' identified by 'readerpwd';ide

<b><font color=red>注意:由于新版的的mysql版本已经将建立帐户和赋予权限的方式分开了,因此若是是最早版本的mysql镜像按下面的方法建立用户、赋权。</font></b>测试

建立帐户:create user '用户名'@'访问主机' identified by '密码'; 赋予权限:grant 权限列表 on 数据库 to '用户名'@'访问主机' ;(修改权限时在后面加with grant option) mysql> create user 'reader'@'%' identified by 'readerpwd'; Query OK, 0 rows affected (4.57 sec) mysql> GRANT REPLICATION SLAVE ON . to 'reader'@'%'; Query OK, 0 rows affected (1.13 sec) FLUSH PRIVILEGES;

查看二进制日志是否开启: mysql> show variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON | +---------------+-------+ 1 row in set (0.99 sec) mysql> show master status;

###从服务器

配置文件目录 mkdir /var/lib/mysql/slave/conf.d 数据存储目录 mkdir var/lib/mysql/slave/data

# cd /var/lib/mysql/slave/conf.d # vim my.cnf

[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL symbolic-links=0 server-id = 2 relay_log = mysql-relay-bin #打开Mysql日志,日志格式为二进制 read_only = 1 #设置只读权限 log_bin = mysql-bin #开启从服务器二进制日志 log_slave_updates = 1 #使得更新的数据写进二进制日志中

启动slave容器:

docker run -it -p 3307:3306 --name slave -v /var/lib/mysql/slave/conf.d:/etc/mysql/conf.d -v /var/lib/mysql/slave/data:/var/lib/mysql    -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

进入slave容器,启动从服务器复制线程,让slave链接master,并开始重作master二进制日志中的事件

docker exec -it slave /bin/bash
root@6df92c02669a:/# mysql -uroot -p123456
mysql>change master to master_host='192.168.1.24',master_port=3306,master_user='reader',master_password='readerpwd',master_log_file='mysql-bin.000001',master_log_pos=155;
mysql> show slave status\G;

###测试:

主服务器:

create database slavetest;

从服务器:观察是否建立了slavetest数据库,若是看到了,就说明实验成功了

show databases;
相关文章
相关标签/搜索