赞
踩
目录
4.4 查看MySQL主服务器的当前状态,包括二进制日志文件和位置
这里我要安装的是mysql8版本。
docker pull mysql:8.0.27
- docker run -p 3306:3306 \
- --name mysql8 \
- --privileged=true \
- -v /app/mysql8/log:/var/log/mysql \
- -v /app/mysql8/data:/var/lib/mysql \
- -v /app/mysql8/conf:/etc/mysql/conf.d \
- -v /app/mysql8/files:/var/lib/mysql-files \
- -e MYSQL_ROOT_PASSWORD=123456 \
- -d mysql:8.0.27
--name mysql8
: 为容器指定一个名称,这里是 mysql8
--privileged=true
: 赋予容器更多的权限。在一般情况下,尽量避免使用 --privileged
,因为它会赋予容器更多的权限,可能会带来一些安全风险。-v /app/mysql8/log:/var/log/mysql
: 将主机上的 /app/mysql8/log
目录映射到容器内的 /var/log/mysql
,用于存储MySQL的日志文件。-v /app/mysql8/data:/var/lib/mysql
: 将主机上的 /app/mysql8/data
目录映射到容器内的 /var/lib/mysql
,用于持久化存储MySQL的数据。-v /app/mysql8/conf:/etc/mysql/conf.d
: 将主机上的 /app/mysql8/conf
目录映射到容器内的 /etc/mysql/conf.d
,用于提供自定义的MySQL配置文件。-v /app/mysql8/files:/var/lib/mysql-files
: 将主机上的 /app/mysql8/files
目录映射到容器内的 /var/lib/mysql-files
,用于存储MySQL的文件。-e MYSQL_ROOT_PASSWORD=123456
: 设置MySQL root用户的密码为 123456
。-d
: 后台运行容器。docker ps
docker exec -it mysql8 /bin/bash
mysql -uroot -p123456
- CREATE DATABASE mydatabase;
-
- USE mydatabase;
-
- CREATE TABLE users (
- id INT PRIMARY KEY AUTO_INCREMENT,
- username VARCHAR(50) NOT NULL,
- email VARCHAR(100) NOT NULL
- );
-
- INSERT INTO users (username, email) VALUES
- ('john_doe', 'john@example.com'),
- ('jane_smith', 'jane@example.com'),
- ('bob_jones', 'bob@example.com');
-
- SELECT * FROM users;
ps:这里也默认使用mysql8版本进行安装。
- docker run -p 3307:3306 \
- --name mysql-master \
- --privileged=true \
- -v /app/mysql-master/log:/var/log/mysql \
- -v /app/mysql-master/data:/var/lib/mysql \
- -v /app/mysql-master/conf:/etc/mysql/conf.d \
- -v /app/mysql-master/files:/var/lib/mysql-files \
- -e MYSQL_ROOT_PASSWORD=123456 \
- -d mysql:8.0.27
docker run
: 启动一个新的Docker容器。-p 3307:3306
: 将主机的3307端口映射到容器的3306端口,这样可以通过主机的3307端口访问MySQL服务。--name mysql-master
: 为容器指定一个名称,这里是 mysql-master
。--privileged=true
: 赋予容器更高的权限。注意,一般情况下最好避免使用 --privileged
,因为它可能会引入一些潜在的安全风险。-v /app/mysql-master/log:/var/log/mysql
: 将主机上的 /app/mysql-master/log
目录映射到容器内的 /var/log/mysql
,用于存储MySQL的日志文件。-v /app/mysql-master/data:/var/lib/mysql
: 将主机上的 /app/mysql-master/data
目录映射到容器内的 /var/lib/mysql
,用于持久化存储MySQL的数据。-v /app/mysql-master/conf:/etc/mysql/conf.d
: 将主机上的 /app/mysql-master/conf
目录映射到容器内的 /etc/mysql/conf.d
,用于提供自定义的MySQL配置文件。-v /app/mysql-master/files:/var/lib/mysql-files
: 将主机上的 /app/mysql-master/files
目录映射到容器内的 /var/lib/mysql-files
,用于存储MySQL的文件。-e MYSQL_ROOT_PASSWORD=123456
: 设置MySQL root用户的密码为 123456
。-d
: 以后台模式运行容器。mysql:8.0.27
: 使用的MySQL镜像的标签,这里是MySQL 8.0.27版本vim /app/mysql-master/conf/my.cnf
[mysqld] ## 设置server_id, 同一个局域网中需要唯一 server_id=1001 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能 log-bin=mall-mysql-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062
ps:在编写配置的时候,参数后不要留有空格,避免不必要的错误!!!
docker restart mysql-master
docker exec -it mysql-master /bin/bash
mysql -uroot -p123456
- create user 'slave'@'%' identified by '123456';
- grant replication slave, replication client on *.* to 'slave'@'%';
- flush privileges;
-
SELECT user, host, authentication_string, Grant_priv, Super_priv, Create_priv, Insert_priv, Update_priv, Delete_priv, Select_priv FROM mysql.user;
得到这样得结果
show master status;
参数说明:
File(文件) | 表示当前正在写入的二进制日志文件的名称 |
Position(位置) | 表示在二进制日志文件中的当前写入位置 |
Binlog_Do_DB | 一个逗号分隔的数据库列表,表示正在复制的二进制日志事件应用于哪些数据库 |
Binlog_Ignore_DB | 一个逗号分隔的数据库列表,表示正在复制的二进制日志事件不应用于哪些数据库 |
Executed_Gtid_Set | 表示已经执行的 GTID(全局事务标识符)集合。在MySQL的 GTID 复制中 |
- docker run -p 3308:3306 \
- --name mysql-slave \
- --privileged=true \
- -v /app/mysql-slave/log:/var/log/mysql \
- -v /app/mysql-slave/data:/var/lib/mysql \
- -v /app/mysql-slave/conf:/etc/mysql/conf.d \
- -v /app/mysql-master/files:/var/lib/mysql-files \
- -e MYSQL_ROOT_PASSWORD=123456 \
- -d mysql:8.0.27
vim /app/mysql-slave/conf/my.cnf
[mysqld] ## 设置server_id, 同一个局域网内需要唯一 server_id=1002 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能,以备slave作为其它数据库实例的Master时使用 log-bin=mall-mysql-slave1-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断 ## 如:1062错误是指一些主键重复,1032是因为主从数据库数据不一致 slave_skip_errors=1062 ## relay_log配置中继日志 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates=1 ## slave设置只读(具有super权限的用户除外) read_only=1
ps:在编写配置的时候,参数后不要留有空格,避免不必要的错误!!!
docker restart mysql-slave
docker exec -it mysql-slave /bin/bash
mysql -uroot -p123456
我这里使用的是 CentOS7,查看服务器地址
ifconfig
- CHANGE MASTER TO
- MASTER_HOST = '192.168.153.133', -- 主服务器的 IP 地址
- MASTER_USER = 'slave', -- 用于连接主服务器的用户名
- MASTER_PASSWORD = '123456', -- 用于连接主服务器的密码
- MASTER_PORT = 3307, -- 主服务器的端口号
- MASTER_LOG_FILE = 'binlog.000011', -- 主服务器的二进制日志文件
- MASTER_LOG_POS = 1193, -- 主服务器的二进制日志位置
- MASTER_CONNECT_RETRY = 30, -- 如果连接失败,重试的时间间隔(秒)
- GET_MASTER_PUBLIC_KEY = 1; -- 启用 SSL 模式,1 表示启用
start slave;
- # \G 可以将横向的结果集表格转换成纵向展示。
- # slave status的字段比较多,纵向展示比友好
- show slave status \G;
主要查看 Slave_IO_Running 和 Slave_SQL_Running是否为 Yes 状态。
ps:如果在安装中遇到问题可以查看下面这篇文章 ↓↓↓ ↓↓↓
如果在安装过程中遇到问题,可以查看这篇文章,这是我遇到的一些问题和解决方案。
Docker中安装MySql的遇到的问题http://t.csdnimg.cn/ujsL1
- CREATE DATABASE IF NOT EXISTS mydatabase;
-
- USE mydatabase;
-
- CREATE TABLE IF NOT EXISTS users (
- id INT PRIMARY KEY AUTO_INCREMENT,
- username VARCHAR(50) NOT NULL,
- email VARCHAR(100) NOT NULL
- );
-
-
- INSERT INTO users (username, email) VALUES
- ('alice_white', 'alice@example.com'),
- ('charlie_brown', 'charlie@example.com'),
- ('emma_jones', 'emma@example.com');
-
- select * from users;
- show databases;
-
- use mydatabase;
-
- select * from users;
主从服务器数据同步
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。