首页 > 数据库 >MySQL搭建主从架构

MySQL搭建主从架构

时间:2023-09-08 22:44:14浏览次数:43  
标签:架构 MySQL run mysqld mysql var master docker 主从

下载 docker 镜像

docker pull mysql

创建两个容器

docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=pwd1 --name mysql-01 mysql
docker run -d -p 3311:3306 -e MYSQL_ROOT_PASSWORD=pwd2 --name mysql-02 mysql

连接测试

可以使用阿里云的DMS或者DataGrip等客户端来连接

修改主从配置文件

将配置文件拷贝出来

docker cp mysql-01:/etc/mysql/my.cnf .

主机修改

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

# 增加的内容 start
#主服务器唯一ID
server-id=1
##启用二进制日志
log-bin=mysql-bin
## 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
##设置需要复制的数据库 需要复制的主数据库名字
binlog-do-db=testdb
##设置logbin格式
binlog_format=STATEMENT
# 增加的内容 end


# Custom config should go here
!includedir /etc/mysql/conf.d/

从机修改

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

# 增加的内容 start
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
# 增加的内容 end


# Custom config should go here
!includedir /etc/mysql/conf.d/

再次拷贝到容器中

docker cp my.cnf xxx:/etc/mysql/

重启两个容器

docker restart mysql-01
docker restart mysql-02

搭建主从复制

主机设置

主机给从机授权

docker exec -it mysql-01 /bin/bash
mysql -uroot -ppwd1
CREATE USER 'szz'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd1';
GRANT REPLICATION SLAVE ON *.* TO 'szz'@'%';
flush privileges;

查看主机状态

show master status;

主要信息

File: mysql-bin.000001
Position: 825

从机设置

docker exec -it mysql-02 /bin/bash
mysql -uroot -ppwd2
change master to master_host='ip', master_user='szz', master_password='pwd1', master_port=3310, master_log_file='mysql-bin.000001', master_log_pos=825, master_connect_retry=30;

从机开启复制

start slave;
show slave status \G;
Slave_IO_Running: YES
Slave_SQL_Running: YES

都为YES表示成功

验证

在主机创建testdb,且创建表及数据,都会同步到从机中

模拟异常情况:从机插入一条记录,主机再插入一条主键一样的记录,报错
解决方式:

stop slave;
set global sql_slave_skip_counter=1; # 跳过报错
start slave;

查看binlog是否开启

show variables like 'log_bin';

参考

Docker实践经验(四)docker 上部署 mysql8 主从复制
史上最详细Docker部署Mysql主从复制,带每一步骤图!!!
MySQL主从复制中的问题(Coordinator stopped beacause there were errors in the workers......)

标签:架构,MySQL,run,mysqld,mysql,var,master,docker,主从
From: https://www.cnblogs.com/strongmore/p/17131249.html

相关文章

  • laravel 通过事务处理两个并发请求同时更新同一条 MySQL 数据
    在处理两个并发请求同时更新同一条MySQL数据的情况时,你需要考虑并发冲突的问题,以确保数据的一致性和完整性。以下是一些解决方法:在Laravel中,你可以使用数据库事务来处理并发更新。在事务中,你可以执行一系列操作,并在操作完成后提交或回滚事务。如果两个请求同时尝试更新相同的......
  • PHP7内核实现原理-基本架构
    发展史PHP最早是由Lerdorf于1995年,使用Perl语言,以PersonalHomePageTools(PHPTools)的形式创建的,目的是为了方便记录个人网站的访客记录和支持留言本等功能,此时称为PHP1。后来越来越多的网站开始使用PHP并希望能提供更多的功能,之后Lerdorf将PHP开源,此时称为......
  • MySQL查询命令练习(一)
    如果需要详细的命令总结在我--软件测试--个人分类里,不想翻阅的话点这个连接也可以哈《MySQL命令总结》https://blog.51cto.com/u_16239770/7383954添加记录语法格式--指定列插入数据INSERTINTO表名(列名1,列名2)VALUES(列值1,列值2);--全部列插入数据 INSERTINTO表名VALUE......
  • mysql create procedure with in parameters ,call procedure
    //createprocedurestatementdelimiter$$usedb$$dropprocedureifexistsinsertIntoT1Table;createprocedureinsertIntoT1Table(innumint)begindeclareiintdefault1;while(i<num)doinsertintot1(name,abstract,author,content,summary)values(uui......
  • MySQL事务及常见存储引擎
    一、事务的四特性事务:transaction一个数据库事务由一条或者多条可发生事务的SQL语句构成,它们形成一个逻辑的工作单元。这些SQL语句要么全部执行成功,要么全部执行失败 原子性(Atomicity)A   事务的原子性是指事务中包含的所有操作要么完成(提交),要么不做(回滚),也就是说所有的活动......
  • XP系统无法访问Mysql 8.0.32数据库的问题
    之前一个项目,客户那边突然反应软件的数据库都访问不了了。这之前他们升级过MYSQL数据库的版本,更新到了最新的版本。我们的应用,因为需要兼容XP系统,所以当时用的是.NETFramework4.0。MySQL的驱动库在6.9.12之后就不支持.NET4.0了。所以我们用的MySQL库是6.9.12的,这个版本的库......
  • MySQL 中给用户设定有限的表访问权限
    在MySQL中可以给用户创建单独的权限,限制访问所有表,借此提高数据库的安全。如下图示例所示。其创建了一个新用户,并把他的权限限制为:1.仅允许通过localhost登录;2.只具备fsdb3数据库相关表的SELECT权限;3.数据库中可能有很多表,只有id,stat,hist,urole,udept等表是能够......
  • ATAM方法架构评估
    ATAM方法(ArchitectureTradeoffAnalysisMethod)是一种用于软件架构评估的方法。它属于场景评估法,主客观程度介于前面两种方法(调查问卷法和度量法)之间。ATAM方法通过分析软件系统的各种架构特征,对系统进行全面的评估,以便在各种可能的方案中做出最佳的决策。ATAM方法主要包括以下几......
  • linux下mysql升级
    在Ubuntu/Debian、CentOS/RHEL系统上,你可以使用不同的命令来查看Linux系统的版本信息。1.查看Ubuntu/Debian版本:```lsb_release-a```或者```cat/etc/os-release```这些命令将输出包含系统版本信息的文本,其中包括发行版名称、发行版版本和系统......
  • mysql explain
    MYSQLExplain解析explain说明用于查看sql语句都执行计划,可以看到sql语句都执行了哪些索引,以及执行的顺序等等。主要作用是优化sql语句,提高sql语句的执行效率。|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|idse......