做网站怎么租用服务器吗,工业设计参考网站,一流的龙岗网站建设,承包小活的平台目录 环境配置容器创建主服务器创建MYSQL容器新增my.cnf文件创建用户并授权 从服务器创建MYSQL容器新增my.cnf文件重启MYSQL容器配置主从同步 验证主从同步彩蛋 MySQL 主从同步#xff08;Master-Slave Replication#xff09;是一种常用的解决方案#xff0c;它允许一个主服… 目录 环境配置容器创建主服务器创建MYSQL容器新增my.cnf文件创建用户并授权 从服务器创建MYSQL容器新增my.cnf文件重启MYSQL容器配置主从同步 验证主从同步彩蛋 MySQL 主从同步Master-Slave Replication是一种常用的解决方案它允许一个主服务器Master将其数据复制到一个或多个从服务器Slave。这种架构不仅提高了数据的冗余性还能通过读取分离来提升应用的性能。 关于MYSQL主从同步的原理以及八股文这篇文章中就暂时不讲述啦直接上干货面对许多同学没有大量服务器又想参与MYSQL集群实战过程中提升技能这篇实操技能你值得拥有~ 环境配置
正如文章主题简单明了docker会使用基本的docker命令即可即使不会也没有关系溪源会带着大家一步一步完成搭建。
获取MYSQL镜像:docker命令
docker pull mysql:8.0.36本地服务器创建数据卷
/Users/docker/data/mysql/对于docker实战而言少不了主机目录与容器数据卷映射之类的操作所以可以将相关数据卷统一目录管理
授权
chmod 777 /Users/docker/data/授权所有用户读写操作
容器创建
主服务器
创建MYSQL容器
docker run -d -p 3317:3306 --privilegedtrue \
-v /Users/docker/data/mysql/master/log:/var/log/mysql \
-v /Users/docker/data/mysql/master/data:/var/lib/mysql \
-v /Users/docker/data/mysql/master/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD123456 \
--name mysql_master mysql:8.0.36命令说明
**docker run**: Docker 命令用于运行一个新的容器。**-d:** 以分离模式detached mode运行容器。容器将会在后台运行你不会看到容器的输出。**-p 3317:3306:** 将主机的端口 3317 映射到容器的端口 3306。MySQL 默认监听 3306 端口通过这种映射你可以通过主机的 3317 端口访问 MySQL。**--privilegedtrue**:给予容器额外的权限。这通常用于需要访问主机的硬件设备或执行某些受限操作的容器。在大多数情况下这不是必要的并且使用时应谨慎。**-v /Users/docker/data/mysql/master/log:/var/log/mysql**:
将主机目录 /Users/docker/data/mysql/master/log 映射到容器的 /var/log/mysql 目录。这样MySQL 的日志文件将会保存在主机上即使容器删除日志文件也会保留。**-v /Users/docker/data/mysql/master/data:/var/lib/mysql**:
将主机目录 /Users/docker/data/mysql/master/data 映射到容器的 /var/lib/mysql 目录。MySQL 的数据文件将会保存在主机上确保数据持久化。**-v /Users/docker/data/mysql/master/conf:/etc/mysql/conf.d**:
将主机目录 /Users/docker/data/mysql/master/conf 映射到容器的 /etc/mysql/conf.d 目录。可以在该目录中放置 MySQL 配置文件如 my.cnf以便自定义 MySQL 配置。**-e MYSQL_ROOT_PASSWORD123456**:
设置环境变量 MYSQL_ROOT_PASSWORD用于初始化 MySQL 的 root 用户密码为 123456。这是在容器首次启动时设置 MySQL root 用户密码的简便方法。
**--name mysql_master** :
指定容器的名称为 mysql_master。这样你可以通过名称而不是容器 ID 来引用这个容器。**mysql:8.0.36:**
使用 mysql 镜像并指定版本为 8.0.36。这将从 Docker Hub 拉取指定版本的 MySQL 镜像并在容器中运行。新增my.cnf文件
路径上面新建文件的路径:**/Users/docker/data/mysql/master/conf ** 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
## 设置server_id同一局域网中需要唯一
server_id101
## 指定不需要同步的数据库名称
binlog-ignore-dbmysql
## 开启二进制日志功能
log-binbinlog
## 设置二进制日志使用内存大小事务
binlog_cache_size1M
## 设置使用的二进制日志格式mixed,statement,row
binlog_formatmixed
## 二进制日志过期清理时间。默认值为0表示不自动清理。
expire_logs_days7
## 跳过主从复制中遇到的所有错误或指定类型的错误避免slave端复制中断。
## 如1062错误是指一些主键重复1032错误是因为主从数据库数据不一致
slave_skip_errors1062
# 设置默认时区
default-time_zone8:00
创建用户并授权 进入容器 docker exec -it mysql_master /bin/bash 执行语句创建slave用户以及设置密码 mysql CREATE USER slave% IDENTIFIED WITH mysql_native_password BY 123456; 执行语句授权slave mysql GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave%; 退出容器输入 exit; mysql exit; bash-4.4# exit 执行重启主数据库 docker restart mysql_master; 重启完成后再次进入容器 docker exec -it mysql_master /bin/bash 进入MYSQL命令行 查看主库状态 show master status;
特别说明此处的position特别重要后面配置从服务器需要用到
从服务器
创建MYSQL容器
docker run -d -p 3318:3306 --privilegedtrue \
-v /Users/docker/data/mysql/slave01/log:/var/log/mysql \
-v /Users/docker/data/mysql/slave01/data:/var/lib/mysql \
-v /Users/docker/data/mysql/slave01/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD123456 \
--name mysql_slave01 mysql:8.0.36新增my.cnf文件
[mysqld]
pid-file /var/run/mysqld/mysqld.pid
socket /var/run/mysqld/mysqld.sock
datadir /var/lib/mysql
secure-file-priv NULL
## 设置server_id同一局域网中需要唯一
server_id102
## 指定不需要同步的数据库名称
binlog-ignore-dbmysql
## 开启二进制日志功能设置二进制日志名默认binlog
log-binbinlog
## 设置二进制日志使用内存大小事务
binlog_cache_size1M
## 设置使用的二进制日志格式mixed,statement,row
binlog_formatmixed
## 二进制日志过期清理时间。默认值为0表示不自动清理。
expire_logs_days7
## 跳过主从复制中遇到的所有错误或指定类型的错误避免slave端复制中断。
## 如1062错误是指一些主键重复1032错误是因为主从数据库数据不一致
slave_skip_errors1062
## relay_log配置中继日志
relay_logmysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates1
## slave设置为只读具有super权限的用户除外
read_only1
# 设置默认时区
default-time_zone8:00
binlog-ignore-dbinfomation_schema,配置同步则主服务器用户会直接同步到从服务器重启MYSQL容器
命令docker restart mysql_slave;
配置主从同步 进入从服务器 进入容器docker exec -it mysql_slave01 /bin/bash 登录MYSQL 执行以下语句在从数据库配置主从复制
change master to master_host主库主机ip地址, master_user2.1在主库创建的账号, master_password2.1在主库创建的密码, master_port3307, master_log_filebinlog.000004, master_log_pos157, master_connect_retry30; 执行语句
change master to master_hostXXXXXX, master_userslave, master_password123456, master_port3307, master_log_filebinlog.000004, master_log_pos157, master_connect_retry30;参数说明
master_host主数据库的IP地址
master_port主数据库的运行端口
master_user在主数据库创建的用于同步数据的用户账号
master_password在主数据库创建的用于同步数据的用户密码
master_log_file指定从数据库要复制数据的日志文件通过查看主数据的状态获取File参数
master_log_pos指定从数据库从哪个位置开始复制数据通过查看主数据的状态获取Position参数
master_connect_retry连接失败重试的时间间隔单位为秒。查看主从同步状态 show slave status \G; 说明此时Slave_IO_Running与Slave_SQL_Running为 NO状态。 开启主从同步 start slave; 说明Slave_IO_Running与Slave_SQL_Running为 Yes状态
验证主从同步
主服务器创建数据库和表
mysql create database tenant;
Query OK, 1 row affected (0.01 sec)mysql use tenant;
Database changed
mysql CREATE TABLE users (- user_id INT AUTO_INCREMENT PRIMARY KEY, -- ID- username VARCHAR(50) NOT NULL UNIQUE, -- 50- email VARCHAR(100) NOT NULL UNIQUE, -- 100- password VARCHAR(255) NOT NULL, -- 255- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- - );
Query OK, 0 rows affected (0.04 sec)mysql show tables;
------------------
| Tables_in_tenant |
------------------
| users |
------------------
1 row in set (0.00 sec)查看从库是否完成同步
彩蛋
哈哈哈此篇彩蛋主要扩展解决问题方案开启主从同步时如何取消主从配置说明。溪源在配置主从配置过程IP地址错误导致从库无法连接如图 Error connecting to source slavelocalhost:3317. This was attempt 2/86400, with a delay of 30 seconds between attempts. Message: Cant connect to MySQL server on localhost:3317 (99) 执行以下命令
停止复制进程 STOP SLAVE;清除所有复制配置 RESET SLAVE ALL;
然后按照从库再重新配置主从同步但是一定要注意查看一下主库的状态判断position位置是否变化。