基于docker环境搭建Mysql主从

这篇具有很好参考价值的文章主要介绍了基于docker环境搭建Mysql主从。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Mysql主从搭建

​ mysql主从复制的原理将主数据库的增删改查等操作记录到二进制日志文件中,从库接收主库日志文件,根据最后一次更新的

起始位置,同步复制到从数据库中,使得主从数据库保持一致。

基于docker环境搭建Mysql主从,docker k8s,docker,mysql,容器

Binary log:主数据库的二进制日志;Relay log:从服务器的中继日志。

复制过程:

1,主数据库在每次事务完成前,将该操作记录到binlog日志文件中;

2,从数据库中有一个I/O线程,负责连接主数据库服务,并读取binlog日志变化,如果发现有新的变动,则将变动写入到relay-log,否则进入休眠状态;

3,从数据库中的SQL Thread读取中继日志,并串行执行SQL事件,使得从数据库与主数据库始,终保持一致。注意事项:涉及时间函数时,会出现数据不一致。原因是,复制过程的两次IO操作和网络、磁盘效率等问题势必导致时间戳不一致;涉及系统函数时,会出现不一致。

准备两台机器:

ip 作用
192.168.43.107 master
192.168.43.108 slave

1.1 Master搭建

​ 登录到192.168.43.107服务器,并执行下面指令:

[root@localhost ~]# mkdir -p /data/mysql/master
[root@localhost ~]# vim my.cnf
[root@localhost ~]# vim Dockerfile

​ my.cnf文件的内容如下:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
#collection-server=utf8_unicode_ci
collation-server=utf8_general_ci
skip-character-set-client-handshake
skip-name-resolve
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
lower_case_table_names=1
#[必须]启用二进制日志
log-bin=mysql-bin
#[必须]服务器唯一ID一般取IP最后一段,这里看情况分配
server-id=107
~                   

​ Dockerfile文件的内容如下:

FROM mysql:5.7.31
# 作者信息 
MAINTAINER mysql from date UTC by Asia/Shanghai "dream21th@dream21th.com"
ENV TZ Asia/Shanghai
COPY my.cnf /etc/mysql/
~                            

​ 构建镜像:

[root@localhost ~]# docker build --rm -t dream21th/mysqlmaster:5.7.31 .

​ 启动容器:

[root@localhost mysql]# docker run -p 3306:3306 --name dream21th-mysql-master -v /data/mysql/logs:/logs -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='!QAZ@WSX#EDC' -d dream21th/mysqlmaster:5.7.31

1.2 Slave搭建

​ 将my.cnf,Dockerfile两个文件复制到108服务器:

[root@localhost master]# scp my.cnf Dockerfile root:192.168.43.108/data/mysql/slave

​ 编辑my.cnf,将server-id改成108,然后执行构建镜像和启动容器:

构建镜像:

[root@localhost ~]# docker build --rm -t dream21th/mysqlmaster:5.7.31 .

​ 启动容器:

[root@localhost mysql]# docker run -p 3306:3306 --name dream21th-mysql-slave -v /data/mysql/logs:/logs -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='!QAZ@WSX#EDC' -d dream21th/mysqlmaster:5.7.31

1.3 主从复制

​ 在107服务器上面执行下面指令进到容器:

[root@localhost master]# docker exec -it dream21th-mysql-master bash

​ 进入容器后通过下面指令登录mysql:

root@3c4f257fb608:/# mysql -uroot -p
#创建一个数据同步用户
mysql> create user 'admin'@'%' identified by 'admin';
Query OK, 0 rows affected (0.00 sec)
# 授权
mysql> grant replication slave on *.* to 'admin'@'%'; 
Query OK, 0 rows affected (0.00 sec)
# 刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# 查看master状态 file和position在做slave同步时要使用
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      749 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
#查看binlog的参数
mysql> show global variables like 'binlog%';
+--------------------------------------------+--------------+
| Variable_name                              | Value        |
+--------------------------------------------+--------------+
| binlog_cache_size                          | 32768        |
| binlog_checksum                            | CRC32        |
| binlog_direct_non_transactional_updates    | OFF          |
| binlog_error_action                        | ABORT_SERVER |
| binlog_format                              | ROW          |
| binlog_group_commit_sync_delay             | 0            |
| binlog_group_commit_sync_no_delay_count    | 0            |
| binlog_gtid_simple_recovery                | ON           |
| binlog_max_flush_queue_time                | 0            |
| binlog_order_commits                       | ON           |
| binlog_row_image                           | FULL         |
| binlog_rows_query_log_events               | OFF          |
| binlog_stmt_cache_size                     | 32768        |
| binlog_transaction_dependency_history_size | 25000        |
| binlog_transaction_dependency_tracking     | COMMIT_ORDER |
+--------------------------------------------+--------------+
15 rows in set (0.00 sec)
#查看服务的参数 107是我们设置的id
mysql> show global variables like 'server%';
+----------------+--------------------------------------+
| Variable_name  | Value                                |
+----------------+--------------------------------------+
| server_id      | 107                                  |
| server_id_bits | 32                                   |
| server_uuid    | 1547eebe-f676-11ec-81e0-0242ac110002 |
+----------------+--------------------------------------+
3 rows in set (0.00 sec)

​ 执行完成上述的操作之后,在108服务器上进入到容器操作:

[root@localhost slave]# docker exec -it dream21th-mysql-slave bash
root@1da4bb80398e:/# mysql -uroot -p
# 设置同步数据
mysql> CHANGE MASTER TO master_host='192.168.43.107', master_user='admin', master_password='admin', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=749;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

#开启slave
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

# 查看slave的状态
mysql> show slave status;

1.4 验证

​ 用navicat登录107在上面建一个库和一张表,并插入一条数据:

基于docker环境搭建Mysql主从,docker k8s,docker,mysql,容器

​ 登录108,找到一样的数据,代表主从成功:

基于docker环境搭建Mysql主从,docker k8s,docker,mysql,容器文章来源地址https://www.toymoban.com/news/detail-782258.html

到了这里,关于基于docker环境搭建Mysql主从的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8s 部署Mysql主从集群

    查看是否出创建成功 (1)执行如下命令 说明: 创建一个 secret 名字为 mysql-password 命名空间为 deploy-test –from-literal=mysql_root_password=root 后面的root为密码 –dry-run 不执行,只是校验 (2)生成资源清单文件,并保存为 mysql_root_password_secret.yaml (3)创建 secret (4)查看 secret (

    2024年03月11日
    浏览(46)
  • 【实战】使用Helm在K8S集群安装MySQL主从

    K8S对于云原生部署有着至关重要的作用,几乎所有的应用和中间件都可以部署在K8S,让其帮助我们进行管理。一般情况下我们推荐数据库不使用容器化部署,但是在某些场合为了方便管理也可以采用该种方式。今天我们就用在K8S集群部署MySQL,仅当作学习学习,在生产环境谨

    2024年02月22日
    浏览(50)
  • k8s mysql 主从复制(带密码) ubuntu arm内核

    安装NFS服务 安装Helm kubectl apply -f mysql.yaml 参考官方文档: https://kubernetes.io/zh-cn/docs/tasks/run-application/run-replicated-stateful-application/

    2024年02月07日
    浏览(40)
  • [Kubernetes]8. K8s使用Helm部署mysql集群(主从数据库集群)

    上一节讲解了K8s包管理工具Helm、使用Helm部署mongodb集群(主从数据库集群),这里来看看 K8s使用Helm部署mysql集群(主从数据库集群) 无本地存储: 当重启的时候,数据库消失 (1).打开官网的应用中心 打开应用中心,搜索mysql (2).安装  1).添加repo仓库 2).安装 具体命令如下:  3).自动生成

    2024年01月21日
    浏览(70)
  • K8S搭建MySQL集群

    使用K8S搭建MySQL一主一从集群。 注意: 以下全部内容,需要把namespace: test中的test换成你要所部署集群所在的名称空间。 以上,MySQL的一主一从集群就创建完毕了。

    2024年02月09日
    浏览(39)
  • docker创建MySQL镜像,搭建主从复制环境

    学习黑马的MySQL时,在主从复制、分库分表、读写分离等阶段需要多台服务器,于是尝试用docker创建镜像搭建主从复制环境。 本文基于centos7搭建mysql镜像。 参考大佬文章: link 编写mysql_file文件: 由于需要进行编辑操作,所以需要额外下载vim 编写run.sh文件 build MySQL镜像 以特权

    2024年02月07日
    浏览(43)
  • k8s搭建(一、环境配置与docker安装)

    天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 k8s搭建文章: k8s搭建(一、k8s环境配置与docker安装) k8s搭建(二、k8s组件安装) k8s搭

    2024年02月21日
    浏览(46)
  • Mysql主从搭建 基于DOCKER

    主节点配置文件 从节点配置文件 部署主节点 部署从节点 主节点执行 主节点执行命令 该命令会返回以下信息: 名称 说明 File 当前正在写入的二进制日志文件名 Position 当前正在写入的二进制日志文件的位置 Binlog_Do_DB 指定需要写入二进制日志的数据库名 Binlog_Ignore_DB 指定不

    2024年02月14日
    浏览(35)
  • 2、基于kubeadm搭建K8S环境

    目录   一、环境说明 二、初始化所有节点 三、修改三台服务器主机名,并写入host文件 四、调整内核参数 五、所有节点安装Docker 六、所有节点配置K8S源 七、所有节点安装kubeadm,kubelet和kubectl 八、部署 kubernetes Master 节点 九、k8s-node 节点加入 master 节点 十、master节点部署

    2024年02月15日
    浏览(28)
  • k8s实践之mysql集群搭建(十五)

    先下载 k8s实践之mysql集群搭建资料 主从模式简介: 当master主服务器上的数据发生改变时,则将其改变写入二进制(binlog)事件日志文件中; slave从服务器会在一定时间间隔内对master主服务器上的二进制日志进行探测,探测其是否发生过改变(通过二进制文件的大小是否不同

    2024年02月14日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包