docker中配置mysql主从分离

news2024/11/27 6:38:51

目录

前言

1、下载mysql安装包

2、mysql 读写分离

3、docker安装三台mysql服务

4、修改主从配置文件

5、重启mysql

6、配置主库

7、配置从库创建同步账户

7.1、进入MySQL01和MySQL02和mysql03服务器新增MySQL用户user 密码root 用于同步账号和密码;

7.2、验证

7.3、进入从数据库停止同步

8、查看主机ip(mysql01)

9、查看主库同步状态

9.1、在主库中查询

9.2、在从库(mysql02,mysql03)中执行如下代码

9.3、启动从库同步

9.4、检查同步状态

9.4.1、错误及处理方法

1、防火墙是否关闭

      shutdown -r now   #重启系统

2、停止同步

3、检查主从库中的同步数据是否和主库保持一致

4、查看输入错误日志信息

5、重新同步

6、检查同步状态

7、检测是否完成


前言

MySQL读写分离是将数据库的读操作和写操作分配到不同的数据库服务器上的一种架构设计。它的主要意义包括以下几个方面:

  1. 提高性能:通过将读操作分散到多个从数据库上,可以分担主数据库的负载,提高整体的数据库性能和吞吐量。读写分离架构特别适合读多写少的应用场景。

  2. 优化用户体验:将读操作分流到从数据库上,可以减少主数据库的并发访问压力,提高响应速度和用户访问体验。对于读密集型应用,如电商网站或新闻门户,读写分离可以优化用户访问速度。

  3. 提高系统可靠性:通过主从复制的方式,从数据库实时复制主数据库的数据,起到冗余备份的作用。当主数据库发生故障或宕机时,可以快速切换到从数据库,确保系统的持续可用性和故障恢复能力。

  4. 方便维护和升级:通过读写分离,可以只对从数据库进行维护和升级操作,而不影响主数据库的正常使用。这样可以减少对整个系统的停机时间和维护成本,提高系统的可维护性。

  5. 节约成本:通过合理配置硬件资源,可以在从数据库上使用较低配置的服务器,减少硬件成本。主数据库可以独立配置高性能的服务器,提高写操作的处理能力。

综上所述,MySQL读写分离可以提升数据库性能、优化用户体验、提高系统可靠性、方便维护和降低成本。在高并发的应用场景下,读写分离是一种常用的架构设计方案。

1、下载mysql安装包

从其他可以连接外网的docker 环境中pull mysql:5.7

然后打包好拷贝到本机

2、mysql 读写分离

删除已经有的mysql容器,准备三台mysql服务器

配置要求:mysql01 为主 mysql02 、mysql03 为从

关闭三台mysql服务器防火墙

vi /etc/selinux/config
     #SELINUX=enforcing     #注释掉
     #SELINUXTYPE=targeted  #注释掉
     SELINUX=disabled  #增加

    :wq #保存,关闭。   shutdown -r now   #重启系统

3、docker安装三台mysql服务

##第一台mysql01
docker run \
-p 3306:3306  \
--name mysql01  \
--restart=always  \
-v  /home/mysql/conf1:/etc/mysql/conf.d  \
-v  /home/mysql/data1:/var/lib/mysql  \
 -v  /home/mysql/log1:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
##第二台mysql02

docker run \
-p 3307:3306  \
--name mysql02  \
--restart=always  \
-v  /home/mysql/conf2:/etc/mysql/conf.d  \
-v  /home/mysql/data2:/var/lib/mysql  \
 -v  /home/mysql/log2:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
​
##第二台mysql03
docker run \
-p 3308:3306  \
--name mysql03  \
--restart=always  \
-v  /home/mysql/conf3:/etc/mysql/conf.d  \
-v  /home/mysql/data3:/var/lib/mysql  \
 -v  /home/mysql/log3:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

4、修改主从配置文件

因为创建mysql 服务时已经将配置文件通过数据卷同步到了宿主机中的/home/mysql/ 只需要在宿主机中的配置文件中修改即可;在三台mysql服务器中的 /etc/mysql/conf.d/mysqld.cnf 都需要添加:

server-id=1   #任意自然数n,只要保证每台MySQL主机不重复就可以了。
log-bin=mysql-bin   #开启二进制日志

注意:原本在mysql服务器中的 /etc/mysql/conf.d/目录下是没有mysqld.cnf文件,我们需要将/etc/my.cnf内容拷贝出来然后在[mysqld]下面添加上

server-id=1   #任意自然数n,只要保证每台MySQL主机不重复就可以了。
log-bin=mysql-bin   #开启二进制日志

如下是三台mysql服务器的配置

第一台mysql01主

vi   /home/mysql/conf1
​
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
​
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
​
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
​
#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server-id=1   #任意自然数n,只要保证每台MySQL主机不重复就可以了。
log-bin=mysql-bin   #开启二进制日志
[client]
socket=/var/run/mysqld/mysqld.sock
​
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
第二台mysql02从

vi   /home/mysql/conf2
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
​
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
​
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
​
#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server-id=2   #任意自然数n,只要保证每台MySQL主机不重复就可以了。
log-bin=mysql-bin   #开启二进制日志
[client]
socket=/var/run/mysqld/mysqld.sock
​
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
第三台mysql03从
vi   /home/mysql/conf3
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
​
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
​
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
​
#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server-id=3   #任意自然数n,只要保证每台MySQL主机不重复就可以了。
log-bin=mysql-bin   #开启二进制日志
[client]
socket=/var/run/mysqld/mysqld.sock
​
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

配置完成后就可以去任意一台部署的mysql服务中查看是否同步

docker exec -it  3a /bin/bash 

​ ##查看是否配置同步 /etc/mysql/conf.d/mysqld.cnf ​

5、重启mysql

docker  restart mysql01 &&  docker  restart mysql02 && docker  restart mysql03

6、配置主库

进入主库查看配置是否生效

##进入主库
docker  exec -it  3a  /bin/bash

##登录数据库
mysql -uroot -proot
##登录成功后输入
SHOW VARIABLES LIKE 'server_id';

第一台mysql01 主

 第二台mysql02从

 第三台mysql03 从

7、配置从库创建同步账户

7.1、进入MySQL01和MySQL02和mysql03服务器新增MySQL用户user 密码root 用于同步账号和密码;

##从库执行
grant replication client on *.* to 'user'@'%'identified by 'root';
##mysql :8及以上使用下面语句
GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO  user@'%' IDENTIFIED BY 'root';
​
##主库执行
grant replication slave on *.* to 'user'@'%' identified   by 'root';

7.2、验证

##验证
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
​
Database changed
​
mysql> select user,host,authentication_string from user;  
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| root          | %         | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| user          | %         | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+---------------+-----------+-------------------------------------------+
5 rows in set (0.00 sec)
​
mysql> 

7.3、进入从数据库停止同步

docker exec -it e6 /bin/bash

mysql -uroot -proot;

stop slave; ##停止同步;

bash-4.2# mysql -uroot -proot;
mysql: [Warning] skipping '!includedir /etc/mysql/conf.d/' directive as maximum includerecursion level was reached in file /etc/mysql/conf.d/mysqld.cnf at line 37!
mysql: [Warning] skipping '!includedir /etc/mysql/mysql.conf.d/' directive as maximum includerecursion level was reached in file /etc/mysql/conf.d/mysqld.cnf at line 38!
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.42-log MySQL Community Server (GPL)
​
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
​
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
​
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
​
##停止同步
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
​
mysql> 

8、查看主机ip(mysql01)

docker  inspect  3a

9、查看主库同步状态

9.1、在主库中查询

##在主库中查询
mysql>  show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000003
         Position: 443
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)
​
mysql>

9.2、在从库(mysql02,mysql03)中执行如下代码

mysql> CHANGE MASTER TO MASTER_HOST='172.17.0.4', #主库IP
MASTER_PORT=3306, #主服务器端口
MASTER_USER='user', #主服务器用户名
MASTER_PASSWORD='root', #主服务器用户密码
MASTER_LOG_FILE='mysql-bin.000003', #日志文件名,获取方法往上看
MASTER_LOG_POS=443; #同步位置,获取方式往上看
​
# 执行结果
mysql> CHANGE MASTER TO MASTER_HOST='172.17.0.4', #IP
    -> MASTER_PORT=3306, #
    -> MASTER_USER='user', #
    -> MASTER_PASSWORD='root', #
    -> MASTER_LOG_FILE='mysql-bin.000003', #
    -> MASTER_LOG_POS=154;
Query OK, 0 rows affected, 2 warnings (0.30 sec)

9.3、启动从库同步

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

9.4、检查同步状态

 Slave_IO_Running:Yes   ##必须为yes
 Slave_SQL_Running: Yes   ##必须为yes
mysql> start slave;
Query OK, 0 rows affected (0.13 sec)
​
mysql> show  slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.17.0.4
                  Master_User: user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 442
               Relay_Log_File: 32124be62dde-relay-bin.000004
                Relay_Log_Pos: 655
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 442
              Relay_Log_Space: 1035
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 31151b6d-215f-11ee-a0f5-0242ac110002
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)
​
mysql>
9.4.1、错误及处理方法

需要检查 1. 网络不通 2. 密码不对 3. pos不对

解决方法:

1、防火墙是否关闭
 vi /etc/selinux/config
     #SELINUX=enforcing     #注释掉
     #SELINUXTYPE=targeted  #注释掉
     SELINUX=disabled  #增加
      shutdown -r now   #重启系统
2、停止同步
mysql>stop slave;
Query OK, 0 rows affected (0.01 sec)
3、检查主从库中的同步数据是否和主库保持一致
Position :154

mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)
​
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
4、查看输入错误日志信息

Slave_IO_Running: Connecting

Slave_SQL_Running: Yes

Last_IO_Error: Accessdenied for user 'replica'@'192.168.0.4' (using password: YES) (Errno: 1045), Error_code:1597

看这个错误是因为权限不够被拒绝,查了一下文档还需要在master上对复制账号增加下面的权限:

在主库中添加账号user 并赋予权限:

grant replication slave on *.* to 'user'@'%' identified   by 'root';

错误信息查看如下:

mysql> show  slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: 172.17.0.4
                  Master_User: user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 154
               Relay_Log_File: e6172c2f5cb9-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Connecting   ##必须为yes
            Slave_SQL_Running: Yes     ##必须为yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 154
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1045
                Last_IO_Error: Accessdenied for user 'replica'@'192.168.0.4' (using password: YES) (Errno: 1045), Error_code:1597
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 0
                  Master_UUID: 
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 230717 07:36:32
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)
​
mysql> 
5、重新同步
mysql> start slave;
Query OK, 0 rows affected (0.13 sec)
6、检查同步状态
mysql> show  slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.17.0.4
                  Master_User: user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 442
               Relay_Log_File: 32124be62dde-relay-bin.000004
                Relay_Log_Pos: 655
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 442
              Relay_Log_Space: 1035
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 31151b6d-215f-11ee-a0f5-0242ac110002
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)
​
mysql> 
7、检测是否完成

创建test_mysql 之前可以先查看三台mysql服务器中的数据库:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
​
mysql> 

在主数据库mysql01中执行下面代码创建数据库;

create database test_mysql charset=utf8;
use test_mysql;
create table user(id int primary key auto_increment);

在从库查询是否已存在创建的test_mysql数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_mysql         |
+--------------------+
5 rows in set (0.00 sec)
​
mysql> use test_mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
​
Database changed
mysql> show tables;
+----------------------+
| Tables_in_test_mysql |
+----------------------+
| user                 |
+----------------------+
1 row in set (0.00 sec)
​
mysql> select * from  user;
Empty set (0.00 sec)
​
mysql> 

同步完成!!!

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

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

相关文章

说好的见框就插呢?

说好的见框就插呢? 背景一句话讲原理速挖XSS 背景 每一个学安全的,都听说过一句话,挖XSS就是见框就插,不得不说这个方法很有用,但是经常遇到插不进去的情况。今天浅聊一下XSS漏洞 一句话讲原理 XSS原理和注入很像&…

SpringCloud Alibaba——Ribbon的属性配置和类配置优先级

目录 一、Ribbon的属性配置和类配置哪个优先级高二、Ribbon的属性配置和类配置优先级源码解读 一、Ribbon的属性配置和类配置哪个优先级高 类配置优先级高 二、Ribbon的属性配置和类配置优先级源码解读 通过RibbonClientConfiguration类中的ribbonRule方法可知,优…

实现将redis中的所有数据备份到数据库表中

实现将redis中的所有数据备份到数据库表中 /*** 将redis中的数据同步到mysql中*/Overridepublic void saveMysqlForRedis(){Jedis jedis new Jedis("127.0.0.1", 6379);//System.out.println(jedis.ping());Set keys jedis.keys("*");//列出所有的keyI…

深度解读为什么说软件测试人人都能学

目录 1.软件测试的发展历程 2.软件测试行业优势 3.优就业软件测试学科优势 1.软件测试的发展历程 软件测试从上个世纪50年代发展至今,共经历了五个阶段:调试测试、证明测试、破坏性测试、评估测试、预防测试等,如下图: 现在已…

什么是NUMA,我们为什么要了解NUMA

在IA多核平台上进行开发时,我们经常会提到NUMA这个词 ,那么NUMA到底指的是什么?我们怎么可以感受到它的存在?以及NUMA的存在对于我们编程会有什么影响?今天我们一起来看一下。 1、NUMA的由来 NUMA(Non-Uniform Memory…

MySQL(十):MySQL语法-进阶

MySQL语法-进阶 数据类型Text 类型Number 类型Date 类型 ASALTER TABLEconcat、group_concatSQL注入阻止SQL注入方案一方案二方案三 HAVING 子句临时表正则表达式获取服务器元数据事务导出数据导出数据导出表作为原始数导出SQL格式的数据 导入数据解决无法导入问题使用 LOAD DA…

kali linux 安装python 3xx 以及多版本切换的方式

简介 在渗透测试的时候,我们通常会用到不同的工具,这些工具可能对python的版本要求不一样,这个时候我们可能就需要在kali上面安装不同版本的python,以及灵活的切换python的版本。 下载python3并安装 以python38来举例&#xff…

Visual Studio 中的新特性:可视化宏扩展

今天,我们很高兴地宣布在 Visual Studio 17.7 预览版中推出可视化宏扩展功能。这个新功能通过可视化的方式对宏代码进行逐步扩展。 若要开始使用此功能,请确保你的 Visual Studio 版本更新到最新版本的 Visual Studio 预览版。 下面,我们来看…

图解Vit 3:Vision Transformer——ViT模型全流程拆解

文章目录 Layer NormalizationClassification TokenPosition embeedding 先把上一篇中的遗留问题解释清楚:上图中,代码中的all_head_dim就是有多少head。把他们拼接起来。 Encoder在Multi-Head Self-Attention之后,维度一直是BND,…

python flask 通过页面输入python代码,执行结果返回页面

1,不太好用 项目结构 app.py from flask import Flask, render_template, request import io import sysapp Flask(__name__)app.route(/) def index():return render_template(index.html)app.route(/execute, methods[POST]) def execute():code request.form[…

B071-项目实战-用户模块--手机注册 管理员登录

目录 完成注册功能后端开发完成UserControllerUserServiceImplLogininfoMapper 前端页面完成绑定数据绑定事件准备登录页 管理员登录1需求分析登录设计页面设计表设计流程设计所需技术 员工新增级联操作登录信息EmployeeServiceImplShopServiceImpl 管理员登录2前端页面后端接口…

Learning to cartoonize using white-box cartoon representations

论文笔记--漫画生成--White-box Cartoon Representations - 知乎论文 Learning to Cartoonize Using White-box Cartoon Representations 源码https://github.com/SystemErrorWang/White-box-Cartoonization效果算法概述这篇论文是将图像风格转成漫画风格,作者认为可…

MySQL索引index

目录 1.索引的概念 2.索引的优缺点 3.索引的数据结构 4.索引结构 1.二叉树: ​编辑2.红黑树: 3.BTree(B-Tree): ​编辑4.传统BTree: ​编辑5.MySQL中的BTree: ​编辑6.Hash&#xf…

浅谈电子设备之电磁屏蔽箱设计要点

屏蔽箱又称隔离箱、屏蔽盒和电磁屏蔽箱,可以对传导和辐射进行处理,为无线通讯产品生产制造提供高效的隔离测试环境,测试内容包含耦合测试、RF功能测试、电磁干扰测试和电磁兼容性测试。屏蔽箱多采用铝合金材料设计,屏蔽材料阻隔能…

C语言模拟实现字符串处理函数

需要多一点点勇气,来面对变差的自己 大家好,我是纪宁。 这篇文章为大家带来的是5大字符串处理函数的模拟实现。 文章目录 1.strlen函数的模拟实现 2.strcpy函数的模拟实现 3.strcmp函数的模拟实现 4.strcat函数的模拟实现 5.strstr函数的模拟实现…

相机标定-基础(一)

1. 何为相机标定? 当相机拍摄照片时,我们看到的图像通常与我们实际看到的不完全相同。这是由相机镜头引起的,而且发生的频率比我们想象的要高。 这种图像的改变就是我们所说的畸变。一般来说,畸变是指直线在图像中出现弯曲或弯曲。 这种畸变我们可以通过相机标定来进行解…

反常积分题目

目录 题目1: 题目2: 题目3:​ 题目4: 题目5: 题目6: 题目7: 我们首先引入反常积分的定义: CSDNhttps://mp.csdn.net/mp_blog/creation/editor/131676865 题目1: 题目2…

STM32 ws2812b多屏驱动程序

文章目录 前言一、ws2812b的数据传输以及屏幕的组合二、代码ws2812screen.c文件ws2812screen.h文件主函数 前言 在上篇文章中使用了stm32的dmatim的方式点亮了ws2812b的灯 但是我的需求不仅仅是点亮他,我需要他像屏幕一样显示某一些东西,ws2812显示有一…

深入学习 Redis - 全局命令、过期策略如何实现、高效定时器原理

目录 Redis 全局命令 get 和 set keys keys 使用注意事项 exists exists 使用注意事项 del del 使用注意事项 expire 【面试经典】redis 中 key 的过期策略是怎么实现的? 定时器实现原理(非 Redis 实现,拓展) 1.基于 …

21 - 队列 - 循环队列——队列的顺序表示和实现

前面我们学习数组队列,链式队列,我们今天来学习循环队列。 队列的定义 队列(Queue)也是一种线性表, 但是它仅能在一端进行插入,而另一端进行删除的操作 ,插入的一端称为 队尾rear,删除的一端称为 队头front 。 向一个栈插入新元素又称作进队或入队, 从一个栈删除元素…