mysql一主双从环境搭建--docker-compose

news2024/12/26 23:40:53

mysql一主双从环境搭建–docker-compose

架构图

一、工作目录结构

├── cluster01
│   ├── msql-master01
│   │   └── volumes
│   │       ├── conf
│   │       │   └── my.cnf
│   │       ├── data
│   │       ├── initdb
│   │       │   ├── init.sql
│   │       │  
│   │       └── log
│   ├── msql-slave01
│   │   └── volumes
│   │       ├── conf
│   │       │   └── my.cnf
│   │       ├── data
│   │       ├── initdb
│   │       │   └── init.sh
│   │       └── log
│   └── msql-slave02
│       └── volumes
│           ├── conf
│           │   └── my.cnf
│           ├── data
│           ├── initdb
│           │   └── init.sh
│           └── log
├── cluster02
│   ├── msql-master02
│   │   └── volumes
│   │       ├── conf
│   │       │   └── my.cnf
│   │       ├── data
│   │       ├── initdb
│   │       │   └── init.sql
│   │       └── log
│   ├── msql-slave03
│   │   └── volumes
│   │       ├── conf
│   │       │   └── my.cnf
│   │       ├── data
│   │       ├── initdb
│   │       │   └── init.sh
│   │       └── log
│   └── msql-slave04
│       └── volumes
│           ├── conf
│           │   └── my.cnf
│           ├── data
│           ├── initdb
│           │   └── init.sh
│           └── log
├── docker-compose.yml
└── reset.sh

1.1 创建工作目录

创建shell文件,prepare.sh

#!/bin/bash
mkdir cluster01/msql-master01/volumes/conf -p
mkdir cluster01/msql-master01/volumes/data -p
mkdir cluster01/msql-master01/volumes/initdb -p
mkdir cluster01/msql-master01/volumes/log -p

mkdir cluster01/msql-slave01/volumes/conf -p
mkdir cluster01/msql-slave01/volumes/data -p
mkdir cluster01/msql-slave01/volumes/initdb -p
mkdir cluster01/msql-slave01/volumes/log -p

mkdir cluster01/msql-slave02/volumes/conf -p
mkdir cluster01/msql-slave02/volumes/data -p
mkdir cluster01/msql-slave02/volumes/initdb -p
mkdir cluster01/msql-slave02/volumes/log -p

mkdir cluster02/msql-master02/volumes/data -p
mkdir cluster02/msql-master02/volumes/initdb -p
mkdir cluster02/msql-master02/volumes/log -p
mkdir cluster02/msql-master02/volumes/conf -p


mkdir cluster02/msql-slave03/volumes/conf -p
mkdir cluster02/msql-slave03/volumes/data -p
mkdir cluster02/msql-slave03/volumes/initdb -p
mkdir cluster02/msql-slave03/volumes/log -p

mkdir cluster02/msql-slave04/volumes/conf -p
mkdir cluster02/msql-slave04/volumes/data -p
mkdir cluster02/msql-slave04/volumes/initdb -p
mkdir cluster02/msql-slave04/volumes/log -p

授予prepare.sh执行权限

chmod +x prepare.sh 

执行prepare.sh

./prepare.sh

1.2 创建文件

1.2.1 msql-master01

创建init.sql文件

vim cluster01/msql-master01/volumes/initdb/init.sql 
grant replication slave,replication client on *.* to 'slave'@'%' identified by "123456";
flush privileges;
select "#####################################  master01 .sql 已执行 #####################";

创建my.cnf 配置文件

vim cluster01/msql-master01/volumes/conf/my.cnf 
[mysqld]
#D,默认是1,一般取IP最后一段
server-id=1

# [必须]启用二进制日志
log-bin=mysql-bin

# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)# 确保binlog日志写入后与硬盘同步
sync_binlog = 1

# 跳过所有的错误,继续执行复制操作
slave-skip-errors = all

binlog-ignore-db=mysql

# 设置需要同步的数据库 binlog_do_db = 数据库名; 
# 如果是多个同步库,就以此格式另写几行即可。
# 如果不指明对某个具体库同步,表示同步所有库。除了binlog-ignore-db设置的忽略的库
# binlog_do_db = test #需要同步test数据库。

1.2.2 msql-slave01

(1)创建init.sh文件

 vim cluster01/msql-slave01/volumes/initdb/init.sh
#!/bin/bash
declare MASTER_HOST="${MASTER_HOST:-localhost}"
declare MASTER_PORT=${MASTER_PORT:-3306}
declare MASTER_USER=${MASTER_USER:-test}
declare MASTER_PASSWORD=${MASTER__PASSWORD:-111111}
echo $MASTER_HOST
#sleep 20s
# mysql  -u root -p123456 -P 8406 -h 124.222.25.184 -e "select 1;"

# 自旋直到 master  启动
declare tryCount=0
for i in {1..10};
do
        declare master_ready=` mysql -u "$MASTER_USER" -h "$MASTER_HOST" -p"$MASTER_PASSWORD" -P "$MASTER_PORT" -e "show master status;" `
        #master_ready=($master_ready)
        echo "########### result:"
        echo $master_ready
        if [ "$master_ready" != "" ]
        then
                echo "master01 已启动"
                break
        else
                echo "尝试连接master0: .....$i"
                sleep 5s
        fi
done
declare RESULT=`mysql -u "$MASTER_USER" -h "$MASTER_HOST" -p"$MASTER_PASSWORD" -P "$MASTER_PORT" -e "show master status;" `
echo "获取master bin_log结果:$RESULT"
RESULT=($RESULT)
declare bin_log=${RESULT[5]}
declare pos=${RESULT[6]}
echo "master 信息:"
echo "bin_log_file:$bin_log, pos: $pos"

# change master to master_host='124.222.25.184',master_user='slave',master_password='123456',master_port=8406,master_log_file='mysql-bin.000003', master_log_pos=602,master_connect_retry=30;
declare changeCMD="change master to master_host='$MASTER_HOST',master_user='slave',master_password='123456',master_port=$MASTER_PORT,master_log_file='$bin_log', master_log_pos=$pos,master_connect_retry=30;"

echo $changeCMD
#declare changeCMD="select 1;"
echo `mysql  -u root -p123456 -e "$changeCMD ;start slave;"`
echo "监听主节点=>   $MASTER_HOST:$MASTER_PORT"

(2)创建my.cnf文件

vim cluster01/msql-slave01/volumes/conf/my.cnf
[mysqld]
#D,默认是1,一般取IP最后一段  
server-id=2

# 如果想实现 主-从(主)-从 这样的链条式结构,需要设置:
# log-slave-updates      只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器。

# 设置需要同步的数据库,主服务器上不限定数据库,在从服务器上限定replicate-do-db = 数据库名;
# 如果不指明同步哪些库,就去掉这行,表示所有库的同步(除了ignore忽略的库)。
# replicate-do-db = test;

# 不同步test数据库 可以写多个例如 binlog-ignore-db = mysql,information_schema 
replicate-ignore-db=mysql

## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-bin
log-bin-index=mysql-bin.index

## relay_log配置中继日志
#relay_log=edu-mysql-relay-bin  

## 还可以设置一个log保存周期:
#expire_logs_days=14

# 跳过所有的错误,继续执行复制操作
slave-skip-errors = all

1.2.3 msql-slave02

(1)创建init.sh文件

vim cluster01/msql-slave02/volumes/initdb/init.sh 
#!/bin/bash
declare MASTER_HOST="${MASTER_HOST:-124.222.25.184}"
declare MASTER_PORT=${MASTER_PORT:-8406}
declare MASTER_USER=${MASTER_USER:-root}
declare MASTER_PASSWORD=${MASTER__PASSWORD:-123456}

# 自旋直到 master  启动
declare tryCount=0
for i in {1..10};
do
   declare master_ready=` mysql -u "$MASTER_USER" -h "$MASTER_HOST" -p"$MASTER_PASSWORD" -P "$MASTER_PORT" -e "show master status;" `
   echo "########### result:"
   echo $master_ready
   if [ "$master_ready" != "" ]
   then
           echo "master01 已启动"
           break
   else
          echo "尝试连接master0: .....$i"
          sleep 5s
   fi
done
# mysql  -u root -p123456 -P 8406 -h 124.222.25.184 -e "select 1;"
declare RESULT=`mysql -u "$MASTER_USER" -h "$MASTER_HOST" -p"$MASTER_PASSWORD" -P "$MASTER_PORT" -e "show master status;" `
RESULT=($RESULT)
declare bin_log=${RESULT[5]}
declare pos=${RESULT[6]}
echo "master 信息:"
echo "bin_log_file:$bin_log, pos: $pos"

declare changeCMD="change master to master_host='$MASTER_HOST',master_user='slave',master_password='123456',master_port=$MASTER_PORT,master_log_file='$bin_log', master_log_pos=$pos,master_connect_retry=30;"

#declare changeCMD="select 1;"
echo `mysql  -u root -p123456 -e "$changeCMD ;start slave;"`
echo "监听主节点=>   $MASTER_HOST:$MASTER_PORT"

(2)创建my.cnf文件

vim cluster01/msql-slave02/volumes/conf/my.cnf 
[mysqld]
#D,默认是1,一般取IP最后一段  
server-id=3

# 如果想实现 主-从(主)-从 这样的链条式结构,需要设置:
# log-slave-updates      只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器。

# 设置需要同步的数据库,主服务器上不限定数据库,在从服务器上限定replicate-do-db = 数据库名;
# 如果不指明同步哪些库,就去掉这行,表示所有库的同步(除了ignore忽略的库)。
# replicate-do-db = test;

# 不同步test数据库 可以写多个例如 binlog-ignore-db = mysql,information_schema 
replicate-ignore-db=mysql


## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-bin
log-bin-index=mysql-bin.index
## relay_log配置中继日志
#relay_log=edu-mysql-relay-bin  

## 还可以设置一个log保存周期:
#expire_logs_days=14

# 跳过所有的错误,继续执行复制操作
slave-skip-errors = all

1.2.4 msql-master02

(1)创建init.sql

vim cluster02/msql-master02/volumes/initdb/init.sql
#!/bin/bash
grant replication slave,replication client on *.* to 'slave'@'%' identified by "123456";
flush privileges;

echo "##################################  master02 .sh 执行 ###########################"
echo "##################################  master02 .sh 执行 ###########################"
echo "##################################  master02 .sh 执行 ###########################"

(2) 创建my.cnf

vim cluster02/msql-master02/volumes/conf/my.cnf 
[mysqld]
#D,默认是1,一般取IP最后一段
server-id=1

# [必须]启用二进制日志
log-bin=mysql-bin

# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)# 确保binlog日志写入后与硬盘同步
sync_binlog = 1

# 跳过所有的错误,继续执行复制操作
slave-skip-errors = all

binlog-ignore-db=mysql

# 设置需要同步的数据库 binlog_do_db = 数据库名; 
# 如果是多个同步库,就以此格式另写几行即可。
# 如果不指明对某个具体库同步,表示同步所有库。除了binlog-ignore-db设置的忽略的库
# binlog_do_db = test #需要同步test数据库。

1.2.5 msql-slave03

(1) 创建init.sh

vim cluster02/msql-slave03/volumes/initdb/init.sh 
#!/bin/bash
declare MASTER_HOST="${MASTER_HOST:-124.222.25.184}"
declare MASTER_PORT=${MASTER_PORT:-8506}
declare MASTER_USER=${MASTER_USER:-root}
declare MASTER_PASSWORD=${MASTER__PASSWORD:-123456}

# 自旋直到 master  启动
declare tryCount=0
for i in {1..10};
do
    declare master_ready=` mysql -u "$MASTER_USER" -h "$MASTER_HOST" -p"$MASTER_PASSWORD" -P "$MASTER_PORT" -e "show master status;" `
       echo "########### result:"
       echo $master_ready
       if [ "$master_ready" != "" ]
       then
       echo "master01 已启动"
      break
      else
      echo "尝试连接master0: .....$i"
      sleep 5s
      fi
done

# mysql  -u root -p123456 -P 8406 -h 124.222.25.184 -e "select 1;"
declare RESULT=`mysql -u "$MASTER_USER" -h "$MASTER_HOST" -p"$MASTER_PASSWORD" -P "$MASTER_PORT" -e "show master status;" `
RESULT=($RESULT)
declare bin_log=${RESULT[5]}
declare pos=${RESULT[6]}
echo "master 信息:"
echo "bin_log_file:$bin_log, pos: $pos"
# change master to master_host='124.222.25.184',master_user='slave',master_password='123456',master_port=8406,master_log_file='mysql-bin.000003', master_log_pos=602,master_connect_retry=30;
declare changeCMD="change master to master_host='$MASTER_HOST',master_user='slave',master_password='123456',master_port=$MASTER_PORT,master_log_file='$bin_log', master_log_pos=$pos,master_connect_retry=30;"

#declare changeCMD="select 1;"
echo `mysql  -u root -p123456 -e "$changeCMD ;start slave;"`
echo "监听主节点=>   $MASTER_HOST:$MASTER_PORT"

(2) 创建my.cnf

vim cluster02/msql-slave03/volumes/conf/my.cnf
[mysqld]
#D,默认是1,一般取IP最后一段  
server-id=4

# 如果想实现 主-从(主)-从 这样的链条式结构,需要设置:
# log-slave-updates      只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器。

# 设置需要同步的数据库,主服务器上不限定数据库,在从服务器上限定replicate-do-db = 数据库名;
# 如果不指明同步哪些库,就去掉这行,表示所有库的同步(除了ignore忽略的库)。
# replicate-do-db = test;

# 不同步test数据库 可以写多个例如 binlog-ignore-db = mysql,information_schema 
replicate-ignore-db=mysql

## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-bin
log-bin-index=mysql-bin.index

## relay_log配置中继日志
#relay_log=edu-mysql-relay-bin  

## 还可以设置一个log保存周期:
#expire_logs_days=14

# 跳过所有的错误,继续执行复制操作
slave-skip-errors = all

1.2.6 msql-slave04

(1) 创建init.sh

vim cluster02/msql-slave04/volumes/initdb/init.sh 
#!/bin/bash
declare MASTER_HOST="${MASTER_HOST:-124.222.25.184}"
declare MASTER_PORT=${MASTER_PORT:-8506}
declare MASTER_USER=${MASTER_USER:-root}
declare MASTER_PASSWORD=${MASTER__PASSWORD:-123456}

# 自旋直到 master  启动
declare tryCount=0
for i in {1..10};
do
   declare master_ready=` mysql -u "$MASTER_USER" -h "$MASTER_HOST" -p"$MASTER_PASSWORD" -P "$MASTER_PORT" -e "show master status;" `
   echo "########### result:"
   echo $master_ready
   if [ "$master_ready" != "" ]
   then
       echo "master01 已启动"
       break
   else
       echo "尝试连接master0: .....$i"
       sleep 5s
   fi
done
# mysql  -u root -p123456 -P 8406 -h 124.222.25.184 -e "select 1;"
declare RESULT=`mysql -u "$MASTER_USER" -h "$MASTER_HOST" -p"$MASTER_PASSWORD" -P "$MASTER_PORT" -e "show master status;" `
RESULT=($RESULT)
declare bin_log=${RESULT[5]}
declare pos=${RESULT[6]}
echo "master 信息:"
echo "bin_log_file:$bin_log, pos: $pos"

declare changeCMD="change master to master_host='$MASTER_HOST',master_user='slave',master_password='123456',master_port=$MASTER_PORT,master_log_file='$bin_log', master_log_pos=$pos,master_connect_retry=30;"

#declare changeCMD="select 1;"
echo `mysql  -u root -p123456 -e "$changeCMD ;start slave;"`
echo "监听主节点=>   $MASTER_HOST:$MASTER_PORT"

(2) 创建 my.cnf

vim cluster02/msql-slave04/volumes/conf/my.cnf
[mysqld]
#D,默认是1,一般取IP最后一段  
server-id=5

# 如果想实现 主-从(主)-从 这样的链条式结构,需要设置:
# log-slave-updates      只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器。

# 设置需要同步的数据库,主服务器上不限定数据库,在从服务器上限定replicate-do-db = 数据库名;
# 如果不指明同步哪些库,就去掉这行,表示所有库的同步(除了ignore忽略的库)。
# replicate-do-db = test;

# 不同步test数据库 可以写多个例如 binlog-ignore-db = mysql,information_schema 
replicate-ignore-db=mysql

## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-bin
log-bin-index=mysql-bin.index

## relay_log配置中继日志
#relay_log=edu-mysql-relay-bin  

## 还可以设置一个log保存周期:
#expire_logs_days=14

# 跳过所有的错误,继续执行复制操作
slave-skip-errors = all

1.3 docker-compose文件

创建docker-compose.yml

 vim docker-compose.yml
version: '3.3'
services:
   # 服务名,  主节点01
  mysql-cluster-master01:
  # 容器名
    container_name: mysql-cluster-master01
    # mysql 镜像
    image: mysql:5.7
    # stop之后重启容器
    restart: always
    # 暴露端口号:  宿主机端口:容器内端口号
    ports:
      - 8406:3306
    privileged: true
    # 按照路径挂载目录: 日志、配置文件、数据
    volumes:
      - $PWD/cluster01/msql-master01/volumes/log:/var/log/mysql
      - $PWD/cluster01/msql-master01/volumes/conf/my.cnf:/etc/mysql/my.cnf
      - $PWD/cluster01/msql-master01/volumes/data:/var/lib/mysql
      - $PWD/cluster01/msql-master01/volumes/initdb:/docker-entrypoint-initdb.d
    # 环境变量: mysql密码
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    command: [
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_general_ci',
        '--max_connections=3000'
    ]
    # 使用的网卡
    networks:
      - myweb
 # 从节点
  mysql-cluster-slave01:
    container_name: mysql-cluster-slave01
    image: mysql:5.7
    restart: always
    ports:
      - 8407:3306
    privileged: true
    volumes:
      - $PWD/cluster01/msql-slave01/volumes/log:/var/log/mysql
      - $PWD/cluster01/msql-slave01/volumes/conf/my.cnf:/etc/mysql/my.cnf
      - $PWD/cluster01/msql-slave01/volumes/data:/var/lib/mysql
      - $PWD/cluster01/msql-slave01/volumes/initdb:/docker-entrypoint-initdb.d

    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      # 需要同步的 master 节点配置 
      MASTER_HOST: "124.222.25.184"
      MASTER_PORT: 8406
      MASTER_USER: "root"
      MASTER__PASSWORD: "123456"
    command: [
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_general_ci',
        '--max_connections=3000'
     ]
    depends_on:
      - mysql-cluster-master01
    networks:
      - myweb
 # 从节点
  mysql-cluster-slave02:
    container_name: mysql-cluster-slave02
    image: mysql:5.7
    restart: always
    ports:
      - 8408:3306
    privileged: true
    volumes:
      - $PWD/cluster01/msql-slave02/volumes/log:/var/log/mysql
      - $PWD/cluster01/msql-slave02/volumes/conf/my.cnf:/etc/mysql/my.cnf
      - $PWD/cluster01/msql-slave02/volumes/data:/var/lib/mysql
      - $PWD/cluster01/msql-slave02/volumes/initdb:/docker-entrypoint-initdb.d
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      # 需要同步的 master 节点配置 
      MASTER_HOST: "124.222.25.184"
      MASTER_PORT: 8406
      MASTER__PASSWORD: "123456"
      MASTER_USER: "root"
    command: [
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_general_ci',
        '--max_connections=3000'
    ]
    depends_on:
       - mysql-cluster-master01
    networks:
      - myweb
 # 服务名,  主节点02
  mysql-cluster-master02:
  # 容器名
    container_name: mysql-cluster-master02
    # mysql 镜像
    image: mysql:5.7
    # stop之后重启容器
    restart: always
    # 暴露端口号:  宿主机端口:容器内端口号
    ports:
      - 8506:3306
    privileged: true
    # 按照路径挂载目录: 日志、配置文件、数据
    volumes:
      - $PWD/cluster02/msql-master02/volumes/log:/var/log/mysql
      - $PWD/cluster02/msql-master02/volumes/conf/my.cnf:/etc/mysql/my.cnf
      - $PWD/cluster02/msql-master02/volumes/data:/var/lib/mysql
      - $PWD/cluster02/msql-master02/volumes/initdb:/docker-entrypoint-initdb.d
    # 环境变量: mysql密码
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    command: [
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_general_ci',
        '--max_connections=3000'
    ]
    # 使用的网卡
    networks:
      - myweb
 # 从节点
  mysql-cluster-slave03:
    container_name: mysql-cluster-slave03
    image: mysql:5.7
    restart: always
    ports:
      - 8507:3306
    privileged: true
    volumes:
      - $PWD/cluster02/msql-slave03/volumes/log:/var/log/mysql
      - $PWD/cluster02/msql-slave03/volumes/conf/my.cnf:/etc/mysql/my.cnf
      - $PWD/cluster02/msql-slave03/volumes/data:/var/lib/mysql
      - $PWD/cluster02/msql-slave03/volumes/initdb:/docker-entrypoint-initdb.d

    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      # 需要同步的 master 节点配置 
      MASTER_HOST: "124.222.25.184"
      MASTER_PORT: 8506
      MASTER__PASSWORD: "123456"
      MASTER_USER: "root"
    command: [
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_general_ci',
        '--max_connections=3000'
    ]
    depends_on:
       - mysql-cluster-master02

    networks:
      - myweb
# 从节点
  mysql-cluster-slave04:
    container_name: mysql-cluster-slave04
    image: mysql:5.7
    restart: always
    ports:
      - 8508:3306
    privileged: true
    volumes:
      - $PWD/cluster02/msql-slave04/volumes/log:/var/log/mysql
      - $PWD/cluster02/msql-slave04/volumes/conf/my.cnf:/etc/mysql/my.cnf
      - $PWD/cluster02/msql-slave04/volumes/data:/var/lib/mysql
      - $PWD/cluster02/msql-slave04/volumes/initdb:/docker-entrypoint-initdb.d

    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      # 需要同步的主节点信息
      MASTER_HOST: "124.222.25.184"
      MASTER_PORT: 8506
      MASTER__PASSWORD: "123456"
      MASTER_USER: "root"
    command: [
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_general_ci',
        '--max_connections=3000'
    ]
    depends_on:
       - mysql-cluster-master02

    networks:
      - myweb
# 配置网卡
networks:
# 使用网卡,桥接模式
  myweb:
          driver: bridge

1.4 辅助脚本

重置环境脚本 reset.sh。用于清除所有 /data ; /log; 中的所有数据。

vim reset.sh
#!/bin/bash
  
docker-compose stop
docker-compose rm -f

rm -rvf cluster01/msql-master01/volumes/data/*
rm -rvf cluster01/msql-master01/volumes/log/*

rm -rvf cluster01/msql-slave01/volumes/log/*
rm -rvf cluster01/msql-slave01/volumes/data/*

rm -rvf cluster01/msql-slave02/volumes/log/*
rm -rvf cluster01/msql-slave02/volumes/data/*


rm -rvf cluster02/msql-master02/volumes/data/*
rm -rvf cluster02/msql-master02/volumes/log/*

rm -rvf cluster02/msql-slave03/volumes/log/*
rm -rvf cluster02/msql-slave03/volumes/data/*

rm -rvf cluster02/msql-slave04/volumes/log/*
rm -rvf cluster02/msql-slave04/volumes/data/*

1.5 搞定

启动mysql集群:docker-compose up

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基础数学(六)——非线性方程求根的数值解法

文章目录期末考核方式求解的一般步骤二分法求根二分法计算样例二分法的优缺点不动点迭代法全局收敛准则收敛性证明样例局部收敛性收敛阶数的定义迭代法具体例题(考试必考)牛顿迭代法例题(使用牛顿法近似目标解)(考过&a…

Gem5模拟器,FS模式运行自定义程序(九)

FS模拟和SE模拟最大的区别是:FS模拟会启动Linux操作系统,会模拟系统的所有组件。因此需要给系统配置相应的Linux内核以及磁盘镜像,镜像文件作为Linux系统的文件系统。在FS模拟下,使用gem5自带的python脚本configs/example/fs.py。…

从umati 看德国人如何玩OPCUA的

到目前为止,机器的联网标准缺乏统一的协议和语义标准。比较知名的要数每个的MTConnect。fanuc机床的focas协议。未来的发展方向是OPCUA协议。但是实现这个目标并非一日之功。德国的umati 社区也许给我们一些启发。 为了推进机床行业的数字化进程,VDW&…

从2022看2023年发展趋势

前言 时光荏苒,回望即将过去的2022年,前端领域在这一年中整体还是保持平稳向前,但对整个IT产业链路及互联网行业来说,变化还是很大的,下面我将简单分享一下个人对整个行业领域的一些观点与思考。鄙人才疏学浅&#xf…

Linux | 从头开始理解Linux以及工作日常常用命令

Linux的版本 分很多种,家庭用途版本有:Linux Mint、Ubuntu、OpenSUSE、Fedora、PC-BSD;商业用途版本有:Debian、RHEL、CentOS;还有其他版本:FreeBSD、OpenBSD、Solaris、OpenSolaris等。 目录 1.操作系统…

QT学习 控件(三)输入文本类与快捷键:QPlainText;QKeySequenceEdit

文章目录QPlainTextQKeySequenceEdit前情回顾: QLineEit QTextEdit文本输入类 QPlainTextEdit是一个简略版本的类,它的性能优于QTextEdit, 主要是因为在文本文档中使用QPlainTextDocumentLayout简化文本布局 QPlainText QPlainText和QTextEdit大致功能…

Dijkstra求最短路(堆优化)

给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。 请你求出 1 号点到 n 号点的最短距离,如果无法从1 号点走到 n 号点,则输出 −1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整…

力扣刷题记录——205.同构字符串、217. 存在重复元素、283. 移动零

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《205.同构字符串、217. 存在重复元素、283. 移动零》。 目…

(十四)大白话磁盘文件中, 40个bit位的数据头以及真实数据是如何存储的?

文章目录 1、前情回顾2、详解40个bit位数据头1、前情回顾 之前我们已经给大家讲到了在磁盘上存储数据的时候, 每一行数据都会有变长字段长度列表,逆序存放这行数据里的变长字段的长度,然后会有NULL值列表,对于允许为NULL的字段都会有一个bit位标识那个字段是否为NULL,也是…

shell第五天作业——函数与数组

题目 一、编写函数,实现打印绿色OK和红色FAILED 二、编写函数,实现判断是否有位置参数,如无参数,提示错误 三、编写函数实现两个数字做为参数,返回最大值 四、编写函数,实现两个整数为参数,…

状态压缩DP——最短Hamilton路径

状态压缩DP——最短Hamilton路径一、题目描述二、思路分析1、状态转移方程(1)状态表示——状态压缩(2)状态转移2、循环和初始化(1)循环设计(2)初始化三、代码实现一、题目描述 二、思…

(day1)自学java基础

非原创,记录学习过程,为方便自己后期复习 目录 1.Java基础概念 2.运算符 3.判断 4.循环 5.循环高级 6.数组 7.数组的内存图 8.方法 ctrlaltL 自动格式化代码 为什么要配置环境变量? 我们想在任意目录都可以打开指定软件,就…

DDR3 数据传输(四)

目录 引言 AXI从侧接口参数 AXI从侧接口信号 参考说明 引言 前文链接&#x

巧用网络指数

哈喽,好久不见!今天我们来一起聊聊网络指数。网络指数平台是以网民在线使用行为数据为基础,借助关键词表达的重要信息检索渠道,一定程度上可以反映某一话题的关注度,也可以帮助我们抓住所谓的“热点”。这里&#xff0…

源码编译mindspore,利用云服务器与wsl

文章目录tmux的使用利用WSL2设置交换空间通过编译产生的output安装tmux的使用 参考:https://blog.csdn.net/weixin_43922901/article/details/89230499 参考:http://www.ruanyifeng.com/blog/2019/10/tmux.html tmux用于远程编译,开启一个会…

2023第一天,给你们展示一下用Python实现自动答题

前言 python实现自动答题? 别管,我这就给你们展示一下 (效果图看不了 不知道为什么说我违gui)😥 话不多说,咱就直接看代码吧 代码 准备模块 import requests import parsel from selenium import webd…

create-vite 源码解析它来喽

create-vite的源码很简单,只有一个文件,代码总行数400左右,但是实际需要阅读的代码大约只有200行左右,废话不多说,直接开始吧。 代码结构 create-vite的代码结构非常简单,直接将index.ts拉到最底下&#…

项目学习--谷粒商城

1. 微服务搭建 本地安装虚拟机,静态IP划分和docker的使用微服务功能模块介绍以及业务模块划分与抽取 2. 前端搭建 3. 后端业务代码完善 云储存OSS的整合与使用JSR303校验以及自定义分组校验 4. Elasticsearch学习 Elasticsearch的基础使用Elasticsearch字段ma…

volatile 详解

1. 前言 在并发编程的过程中,volatile属性非常重要。首先我们要了解并发编程的三大特性:可见性, 有序性, 原子性而我们今天的了解的volatile 就牵扯到可见性, 有序性。同时我也会从个人了解的角度给大家分析下,如果有什么不对的地方也希望大家…

物联网与射频识别技术,课程实验(一)

目录 (1)communication.py (2)Reader.py (3)Tag.py 实验1—— EPC C1G2标准下的标签状态转换仿真 实验说明: 利用Python或Matlab模拟C1G2标签的状态转换模型; 程序应能显示标签…