首页 > 数据库 >docker下安装mysql,并实现主从复制

docker下安装mysql,并实现主从复制

时间:2024-05-26 15:13:16浏览次数:19  
标签:opt 容器 主从复制 -- master mysql docker

1 mysql的安装与启动

1.1 拉取mysql5.7的镜像
docker pull mysql:5.7

1.2 运行

  docker run: 运行Docker容器的命令。


  --restart=always: 指定容器在退出时总是重新启动。这意味着,无论容器是正常退出还是异常退出,Docker将自动重新启动这个容器。


  --privileged=true: 赋予容器特权,允许它在主机上执行一些敏感操作,这通常是出于一些特殊需求的考虑,但需要注意潜在的安全风险。


  -p 13306:3306: 将主机的端口13306映射到容器的端口3306,这样外部系统可以通过主机的3306端口访问MySQL服务。


  --name mysql: 为容器指定一个名称,这里是"mysql"。


  -v /opt/mysql/mysql-master/logs:/logs: 将主机上的/opt/mysql/mysql-master/logs目录映射到容器内的/logs目录,用于存储MySQL的日志文件。


  -v /opt/mysql/mysql-master/data:/var/lib/mysql: 将主机上的/opt/mysql/mysql-master/data目录映射到容器内的/var/lib/mysql目录,用于存储MySQL的数据文件。


  -v /opt/mysql/mysql-master/conf:/etc/mysql: 将主机上的/opt/mysql/mysql-master/conf目录映射到容器内的/etc/mysql目录,用于存储MySQL的配置文件。


  -v /opt/mysql/mysql-master/my.cnf:/etc/mysql/my.cnf: 将主机上的/opt/mysql/mysql-master/my.cnf文件映射到容器内的/etc/mysql/my.cnf文件,这是MySQL的配置文件。


  -e MYSQL_ROOT_PASSWORD=mysql: 设置MySQL的root用户密码为"mysql",如果不设置,会在日志中生成一个默认root密码,通过docker logs mysql-container查看。


  -d mysql: 以后台(detached)模式运行MySQL容器。

 

  #如下

  docker run

  --name mysql-master

  -p 13306:3306

  -v /opt/mysql/mysql-master/logs:/logs

  -v /opt/mysql/mysql-master/data:/var/lib/mysql

  -v /opt/mysql/mysql-master/conf:/etc/mysql/conf.d

  -e MYSQL_ROOT_PASSWORD=mysql

  -d

  mysql:5.7

 

  1.3 主机上记得把13306端口放开,或者关闭防火墙

 firewall-cmd --zone=public --add-port=13306/tcp --permanent

 firewall-cmd --reload

 

至此可以通过数据连接工具进行连接了,启动完成

1.5 小记
进入mysql容器,如果出现 #bash-4.2
在容器中执行:
cp /etc/skel/.bash* /root/

  2 搭建mysql集群

2.1 修改主节点的onf.d文件内容

  vim /opt/mysql/mysql-slave1/my.cnf

  #加入如下配置

  server-id=1    #设置服务id,需全局唯一

  log-bin=/var/lib/mysql/mysql-bin  #开启binlog日志,供从库读取

  #binlog-do-db =test
  binlog-ignore-db=mysql
  binlog-ignore-db=sys
  binlog-ignore-db=performance_scheme
  binlog-ignore-db=information_scheme
  binlog_format=row

  #重启主节点

  docker restart mysql-master

  

 2.2 master节点创建一个用户

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master   #查看主节点在容器中的ip

docker exec -it mysql-master bash #进入容器
mysql -uroot -p123 #登录mysql
#创建用户方式一
grant replication slave on *.* to 'slave1'@'172.17.0.2' identified by '账号密码' #创建一个名为slave1的用户并给其复制权限,可以mysql数据库中user表中查看,此为mysql5.7版本语句
#创建用户方式二
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';这里的username是您要创建的用户名,hostname指定从哪些主机该用户可以连接到服务器,password是该用户的密码。您可以使用%作为通配符来允许从任何主机连接
GRANT ALL PRIVILEGES ON database_name.table_name TO 'username'@'hostname';这里的database_nametable_name指定了用户被授权的数据库和表。ALL PRIVILEGES表示授予用户所有权限。您也可以根据需要授予特定权限,如SELECT, INSERT, UPDATE, DELETE等。
FLUSH PRIVILEGES; 刷新权限。

#查看master的position,这是个会变化的值,后面从机连接主机时会用到。
show master status;
2.3 docker上再创建一个mysql容器mysql-slave1

  docker run

  --name mysql-slave1

  -p 13307:3306

  -v /opt/mysql/mysql-slave1/logs:/logs

  -v /opt/mysql/mysql-slave1/data:/var/lib/mysql

  -v /opt/mysql/mysql-slave1/conf:/etc/mysql/conf.d

  -e MYSQL_ROOT_PASSWORD=mysql

  -d

  mysql:5.7

  同样要记得关闭防火墙或开放端口出去

2.4 配置从库
vim otp/mysql/mysql-slave1/conf/my.cnf
 #加入服务id配置
[mysqld]
 server-id=2 #要全局唯一
docker restart mysql-slave #重启从库

docker exec -it mysql-slave baash #进入从库
mysql -uroot -p123 #登录mysql

? change master to #此条命令可以查看配置列表模板,辅助配置

#配置主库连接
#将mysql设置为从库
 CHANGE MASTER TO MASTER_HOST = '172.17.0.2', MASTER_USER = 'slave1', MASTER_PASSWORD = 'mysql', MASTER_PORT = 3306, MASTER_RETRY_COUNT = 0, MASTER_HEARTBEAT_PERIOD = 10000;
 #开启slave同步
start slave;

   #查看是否配置成功

  show slave status\G;

 Slave_IO_Running、Slave_SQL_Running这两处显示两个yes,则说明主从复制建立成功,也可以在主库写入数据,在从库进行查询,如果能查到主库写入的信息,则也能说明主从关系建立成功。

 至此,mysql的主从复制搭建完成,如果需要增加从节点继续创建slave即可,注意server-id不可重复。

  #若想停止从库同步

  stop slave

 

搭建过程中出现报错可参考:https://blog.51cto.com/u_15956038/6040698

 

标签:opt,容器,主从复制,--,master,mysql,docker
From: https://www.cnblogs.com/wjx001/p/18212777

相关文章

  • 成为MySQL DBA后,再看ORACLE数据库(一、安装与启动)
    一、前言ORACLE作为世界上最牛逼的关系型数据库,也是我从事数据库行业入门学习的数据库,记得当时学习ORACLE数据库时就深感其复杂性,对很多概念一知半解、似懂非懂,当ORACLE管理员期间也遇到过不少问题,不过好在有ORACLE原厂工程师驻场,基本上问题都能解决。后来因为领导的安排和工作的......
  • MySQL-存储引擎
    MySQL体系结构1).连接层最上层是一些客户端和链接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。2).服务层第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行......
  • Mysql-约束
    约束概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。目的:保证数据库中数据的正确、有效性和完整性。约束演示:外键约束左侧的emp表是员工表,里面存储员工的基本信息,包含员工的ID、姓名、年龄、职位、薪资、入职日期、上级主管ID、部门ID,在员......
  • Docker常见命令
    目录一、系统管理命令1、启动Docker服务2、停止Docker服务3、重启Docker服务4、设置Docker开机启动5、查看Docker服务状态6、查看Docker版本信息二、镜像管理命令1、查看本地镜像2、搜索DockerHub上的镜像2.1、常见选项2.2、示例:搜索星数大于100的MySQL镜像并限制搜索结果为5个3......
  • Django和MySQL与Vue项目之间的数据是如何流动实现交互响应的
    在一个前后端分离的Django和Vue项目中,Django作为后端,MySQL作为数据库,Vue作为前端,数据的流动和交互可以通过API来实现。以下是数据流动的过程及交互的详细说明:1.数据流动过程概述前端发送请求:Vue应用通过HTTP请求向Django后端发送数据请求(例如获取、创建、更新或删除数据)。后......
  • Java项目:校园周边美食探索(java+SpringBoot+Mybaits+Vue+elementui+mysql)
    源码获取:俺的博客首页"资源"里下载! 项目介绍基于Springboot+vue实现的校园周边美食探索及分享平台本系统包含管理员、用户两个角色。管理员:用户管理、美食鉴赏管理、好友管理、收藏管理、系统管理用户:登录、注册、个人中心管理、美食鉴赏管理、好友管理、收藏管理......
  • MySQL报错注入之Xpath报错&floor函数报错
    目录前言Xpath报错注入updatexml()函数extractvalue()函数floor函数报错count与groupby的虚拟表总结前言报错注入的使用场景一般是页面无法正常回显数据库查询的内容,但是会详细显示查询过程的错误信息。如果连错误信息都没有,那就是盲注了。报错注入的原理就是将子查询语句查询......
  • MySQL入门——增删查改(下)
    数据库约束约束类型NOTNULL-指示某列不能存储NULL值。UNIQUE-保证某列的每行必须有唯一的值。DEFAULT-规定没有给列赋值时的默认值。PRIMARYKEY-NOTNULL和UNIQUE的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的......
  • MySQL函数
    MySQL数据库提供了很多函数包括:数学函数;字符串函数;日期和时间函数;条件判断函数;系统信息函数;加密函数;格式化函数;mysql高级教程:http://cainiao.guashuw.com/一、数学函数数学函数主要用于处理数字,包括整型、浮点数等。函数作用ABS(x)返回x的绝对值......
  • MySQL Grant命令
    MySQL赋予用户权限命令的简单格式可概括为:grant权限on数据库对象to用户 MySQL高级教程:http://cainiao.guashuw.com/一、grant普通数据用户,查询、插入、更新、删除数据库中所有表数据的权利。grantselectontestdb.*tocommon_user@'%'grantinsertontestdb.*......