Docker搭建MySQL主从服务器

ops/2025/3/31 8:55:08/

一、在主机上创建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),然后进入该库创建一张新表,然后,进入从服务器查看是否存在新库和新表。


http://www.ppmy.cn/ops/167371.html

相关文章

【day14】画流程图

绘制业务流程图是梳理和优化企业流程的重要工具,以下是零基础也能快速上手的指南,涵盖必备知识、绘制步骤和常见误区: 一、画流程图前必须了解的3个核心概念 流程图的本质 不是“画图”,而是将复杂业务逻辑可视化的工具&#xff0…

java面试题之多线程

java面试题之多线程 什么是线程?什么是线程安全和线程不安全?什么是⾃旋锁?什么是CAS?什么是乐观锁和悲观锁?什么是AQS?什么是原⼦操作?在Java Concurrency API中有哪些原⼦类(atomic classes)&…

机器学习算法实战——天气数据分析(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 引言 天气数据分析是气象学和数据科学交叉领域的一个重要研究方向。随着大数据技术的发展,气象数据的采集、存储和分…

LeetCode 30 —— 30.串联所有单词的子串

题目: 给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。 注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。 示例 1&#xff…

Jenkins自动化部署pigx项目的实践总结

1、新建任务 新建Item 创建freestyle project的任务 2、配置 配置任务的相关参数 2.1 简单描述 2.1 源码管理 输入源码仓库地址创建访问仓库的账号密码 2.3 构建步骤 选择windows 的命令进行部署服务 2.3.1 部署服务使用的脚本 关闭过去启动的服务 echo off for …

linux 下消息队列

文章目录 📨 Linux System V 消息队列实战一、消息队列核心概念 💡1. 消息队列特点 🌟2. 生命周期 🔄 二、项目概述三、完整代码实现1. 公共头文件 common.hpp2. 发送端 sender.cpp3. 接收端 receiver.cpp 三、编译与运行指南1. 编…

Python功能完美的宝库——内置的强大“武器库”builtins

builtins模块包含了Python大量的内置对象(函数、异常和类型等),她是Python的内置武器库,堪称功能完美的宝库。 笔记模板由python脚本于2025-03-19 08:16:27创建,本篇笔记适合喜欢探究python的coder翻阅。 【学习的细节…

Qt窗口控件之字体对话框QFontDialog

字体对话框QFontDialog QFontDialog 是 Qt 内置的字体对话框,用户能够在这里选择字体的样式、大小,设置加粗和下划线并将结果作为返回值返回。QFontDialog 最好使用其提供的静态函数实例化匿名对象,并获取返回值最为用户选择字体设置的结果。…