一、在主机上创建MySQL配置文件——my.cnf
master服务器配置文件路径:/data/docker/containers/mysql-cluster-master/conf.d/my.cnf
slave服务器配置文件路径: /data/docker/containers/mysql-cluster-master/conf.d/my.cnf
master服务配置文件内容 | [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in Redirect Notice lower_case_table_names=1 default-time_zone='+8:00' max_connections=1000 # open federated engine federated # [必须]启用二进制日志 log-bin=mysql-bin # [必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配 server-id=1 [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # # include all files from the config directory # !includedir /etc/my.cnf.d |
slave服务配置文件内容 | [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in Redirect Notice lower_case_table_names=1 default-time_zone='+8:00' max_connections=1000 # open federated engine federated # [必须]启用二进制日志 log-bin=mysql-bin # [必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配 server-id=2 [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # # include all files from the config directory # !includedir /etc/my.cnf.d |
二、从docker拉取mysql镜像,创建并启动MySQL主、从容器
master服务 | docker run --name mysql-cluster-master \ --restart always \ -v /mnt/app/docker/containers/mysql-cluster-master/conf.d:/etc/mysql/conf.d \ -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql |
slave服务 | docker run --name mysql-cluster-slave \ --restart always \ -v /mnt/app/docker/containers/mysql-cluster-slave/conf.d:/etc/mysql/conf.d \ -p 3308:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql |
三、配置主服务器
1、使用mysql命令登录主服务器(可以有多种办法,此处使用docker exec命名方式)
1)进入主服务器所在的docker容器。在主机控制台执行以下命令:
docker exec -it mysql-master bash
2)在主服务器的docker容器bash执行以下命令:
mysql -u root -p
在提示符后输入密码
2、创建用户名、密码,并授权
GRANT REPLICATION SLAVE ON *.* to 'bkuser'@'%' identified by ‘123456’;
3、查看主服务器状态,并记录下mysql-bin和pos的值
执行命令:show master status;
将显示如下界面:
四、配置从服务器
1、使用mysql命令登录从服务器(可以有多种办法,此处使用docker exec命名方式)
1)进入从服务器所在的docker容器。在主机控制台执行以下命令:
docker exec -it mysql-master bash
2)在从服务器的docker容器bash执行以下命令:
mysql -u root -p
在提示符后输入密码
2、执行以下MySQL命令(具体值根据实际情况而定)
change master to master_host='192.168.84.246', master_user='bkuser', master_log_file='mysql-bin.000003', master_log_pos=2487, master_port=3307, master_password='123456'; |
master_host:填写主机的IP(不可使用127.0.0.1或localhost)
master_user:三.2中新建的MySQL主服务器的用户
master_log_file:三.3中File的值
master_log_pos:三.3中Position的值
master_port:MySQL主服务器的端口号
master_password:三.2中新建的MySQL主服务器用户的密码
3、启动MySQL从服务器
执行MySQL命令:
start slave;
4、查看从服务器状态
执行MySQL命令:
show slave status\G
如果看以下三项的值与表中一致,则说明已经成功。
…… Slave_IO_State: Waiting for master to send event Slave_IO_Running: Yes //此状态必须YES Slave_SQL_Running: Yes //此状态必须YES …... |
五、测试
在主服务器上创建一个新库(Database or Schema),然后进入该库创建一张新表,然后,进入从服务器查看是否存在新库和新表。