培训第二十九天(python脚本使数据库读写分离,mysql主从开机自动同步,python操作数据库,MyCat插件的学习)

news2025/4/6 10:15:32

上午

1、python脚本实现数据库主从分离

 # 引入模块 python链接mysql工具,驱动包,连接器
 import pymysql
 # python 类 类名 rwsplit,名字可以和文件名不一致
 # 三个函数,函数的标识 def 函数名 (self,参数列表):
     # __init__  初始化函数,构造函数,在这个类被实例的时候,执行__init__函数
     # master_statement  自定义函数,根据实际需要,开发或者运维自己定义的函数
     # slave_statement   自定义函数,根据实际需要,自定
 class rwsplit(object):
     # 构造函数
     # 1.在屏幕上输出了 initialized
     # 2.创建了全局变量master_conn
     # 3.创建了全局变量slave_conn
     # 4.全局变量可以在其他的函数中进行调用和修改
     # 5.为什么要在init函数中创建全局变量,因为init在rwsplit类被实例的同时执行
     def __init__ (self):
         print("initialized")
         self.master_conn=pymysql.connect(
             host="10.0.0.57",
             user="li",
             password="li",
             database="test",
             port=3306
         )
         self.slave_conn=pymysql.connect(
             host="10.0.0.58",
             user="li",
             password="li",
             database="test",
             port=3310
         )
     # 输出serverid,执行sql语句,增删改查
     def master_statment(self,sql):
         cursor=self.master_conn.cursor()
         cursor.execute("show variables like 'server_id'")   #在 MySQL中用于查询服务器标识(server_id)变量值的命令
         print(cursor.fetchall())
         cursor.execute(sql)
         print(cursor.fetchall())
         self.master_conn.commit()
     # 执行查询操作    
     def slave_statment(self,sql):
         cursor=self.slave_conn.cursor()
         cursor.execute(sql)
         print(cursor.fetchall())
 # 入口
 if __name__ == "__main__":
     # 实例rwsplit
     demo=rwsplit()
     # 要求用户输入一个sql语句
     sql=input("sign sql:")
     #判断sql
     if sql[:6]=="select" or sql[:4]=="show":
         demo.slave_statment(sql)
     else:
         demo.master_statment(sql)

2、mysql主从自动开机同步

 # 主数据库:
 mysql> flush tables with read lock;
 mysql> show master status;
 +---------------+----------+--------------+------------------+-------------------+
 | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 +---------------+----------+--------------+------------------+-------------------+
 | binlog.000002 |      154 |              |                  |                   |
 +---------------+----------+--------------+------------------+-------------------+
 1 row in set (0.00 sec)
 mysql> select host,user from mysql.user;
 ERROR 2006 (HY000): MySQL server has gone away
 No connection. Trying to reconnect...
 Connection id:    6
 Current database: test
 +-----------+---------------+
 | host      | user          |
 +-----------+---------------+
 | %         | li            |
 | %         | root          |
 | %         | slave0        |
 | localhost | mysql.session |
 | localhost | mysql.sys     |
 +-----------+---------------+
 5 rows in set (0.02 sec)
 # 从数据库:
 mysql> help change master to
 Name: 'CHANGE MASTER TO'
 Description:
 Syntax:
 CHANGE MASTER TO option [, option] ... [ channel_option ]
 option: {
     MASTER_BIND = 'interface_name'
   | MASTER_HOST = 'host_name'
   | MASTER_USER = 'user_name'
   | MASTER_PASSWORD = 'password'
   | MASTER_PORT = port_num
   | MASTER_CONNECT_RETRY = interval
   | MASTER_RETRY_COUNT = count
   | MASTER_DELAY = interval
   | MASTER_HEARTBEAT_PERIOD = interval
   | MASTER_LOG_FILE = 'source_log_name'
   | MASTER_LOG_POS = source_log_pos
   | MASTER_AUTO_POSITION = {0|1}
   | RELAY_LOG_FILE = 'relay_log_name'
   | RELAY_LOG_POS = relay_log_pos
   | MASTER_SSL = {0|1}
   | MASTER_SSL_CA = 'ca_file_name'
   | MASTER_SSL_CAPATH = 'ca_directory_name'
   | MASTER_SSL_CERT = 'cert_file_name'
   | MASTER_SSL_CRL = 'crl_file_name'
   | MASTER_SSL_CRLPATH = 'crl_directory_name'
   | MASTER_SSL_KEY = 'key_file_name'
   | MASTER_SSL_CIPHER = 'cipher_list'
   | MASTER_SSL_VERIFY_SERVER_CERT = {0|1}
   | MASTER_TLS_VERSION = 'protocol_list'
   | IGNORE_SERVER_IDS = (server_id_list)
 }
 mysql> change master to master_host="10.0.0.57",master_user="slave0",master_password="123",master_log_file="binlog.000002",master_log_pos=154,get_master_public_key=1;
 Query OK, 0 rows affected, 2 warnings (0.01 sec)
 mysql> start slave;
 Query OK, 0 rows affected (0.00 sec)
 mysql> show slave status\G
 *************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 10.0.0.57
                   Master_User: slave0
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: binlog.000002
           Read_Master_Log_Pos: 154
                Relay_Log_File: relaylog.000002
                 Relay_Log_Pos: 317
         Relay_Master_Log_File: binlog.000002
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
 # 从数据库重启:
 mysql> start slave;
 Query OK, 0 rows affected, 1 warning (0.04 sec)
 mysql> show slave status\G
 *************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 10.0.0.57
                   Master_User: slave0
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: binlog.000002
           Read_Master_Log_Pos: 154
                Relay_Log_File: relaylog.000002
                 Relay_Log_Pos: 317
         Relay_Master_Log_File: binlog.000002
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes

3、配置mysql57

mysql-5.7.44-linux-glibc2.12-x86_64.tar

 [root@mysql57 ~]# yum -y install lrzsz
 [root@mysql57 ~]# tar -zxf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
 [root@mysql57 ~]# cp -r mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql
 [root@mysql57 ~]# rm -rf /etc/my.cnf
 [root@mysql57 ~]# mkdir /usr/local/mysql/mysql-files
 [root@mysql57 ~]# useradd -r -s /sbin/nologin mysql
 [root@mysql57 ~]# chown mysql:mysql /usr/local/mysql/mysql-files/
 [root@mysql57 ~]# chmod 750 /usr/local/mysql/mysql-files/
 [root@mysql57 ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql
 2024-08-15T02:41:36.903061Z 1 [Note] A temporary password is generated for root@localhost: zc0fLfoM%SDP
 [root@mysql57 ~]# ls /usr/local/mysql/
 bin   docs     lib      man          README  support-files
 data  include  LICENSE  mysql-files  share
 [root@mysql57 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql57
 [root@mysql57 ~]# service mysql57 start
 Starting MySQL.Logging to '/usr/local/mysql/data/mysql57.err'.
  SUCCESS! 
 [root@mysql57 ~]# vim /usr/local/mysql/my.cnf
  [mysqld]
 basedir=/usr/local/mysql
 datadir=/usr/local/mysql/data
 socket=/tmp/mysql.sock
 port=3306
 log-error=/usr/local/mysql/data/db01-master.err
 log-bin=/usr/local/mysql/data/binlog
 server-id=10
 character_set_server=utf8mb4
 [root@mysql57 ~]# service mysql57 restart
 [root@mysql57 ~]# sed -i '$aexport PATH=/usr/local/mysql/bin:$PATH' /etc/profile
 [root@mysql57 ~]# source /etc/profile
 [root@mysql57 ~]# mysql -p'zc0fLfoM%SDP'
 mysql> alter user 'root'@'localhost' identified by '123';
 Query OK, 0 rows affected (0.00 sec)
 mysql> create user 'li'@'%' identified by 'li';
 Query OK, 0 rows affected (0.00 sec)
 mysql> grant all on *.* to 'li'@'%';
 Query OK, 0 rows affected (0.00 sec)
 mysql> flush privileges;
 Query OK, 0 rows affected (0.00 sec)
 mysql> create database if not exists test charset utf8mb4;
 Query OK, 1 row affected (0.01 sec)
 mysql> use test;
 Database changed
 mysql> create table user(id int primary key auto_increment,username varchar(45) notnull,password varchar(45) not null);
 Query OK, 0 rows affected (0.01 sec)
 mysql> insert into user (username,password)values("aaa","aaa");
 Query OK, 1 row affected (0.01 sec)
 mysql> select * from user;
 +----+----------+----------+
 | id | username | password |
 +----+----------+----------+
 |  1 | aaa      | aaa      |
 +----+----------+----------+
 1 row in set (0.00 sec)

4、使用python操纵mysql数据库

(1)使用普通用户连接数据库并创建新用户
 # python:
 >>> import pymysql
 >>> conn=pymysql.connect(host="10.0.0.57",port=3306,database="test",user="li",password="li")
 >>> cursor=conn.cursor()
 >>> cursor.execute("create user 'slave0'@'%' identified by '123'")
 0
 # mysql:
 mysql> select host,user from mysql.user;
 +-----------+---------------+
 | host      | user          |
 +-----------+---------------+
 | %         | li            |
 | %         | slave0        | 
 | localhost | mysql.session |
 | localhost | mysql.sys     |
 | localhost | root          |
 +-----------+---------------+
 5 rows in set (0.00 sec)
(2)使用root用户连接数据库并为用户授予权限
 # mysql:
 mysql> update mysql.user set host='%' where user='root';
 Query OK, 1 row affected (0.00 sec)
 Rows matched: 1  Changed: 1  Warnings: 0
 mysql> flush privileges;
 Query OK, 0 rows affected (0.00 sec)
 mysql> select host,user from mysql.user;
 +-----------+---------------+
 | host      | user          |
 +-----------+---------------+
 | %         | li            |
 | %         | root          |
 | %         | slave0        |
 | localhost | mysql.session |
 | localhost | mysql.sys     |
 +-----------+---------------+
 5 rows in set (0.00 sec)
 # python:
 >>> conn=pymysql.connect(host="10.0.0.57",port=3306,database="test",user="root",password="123");
 >>> cursor=conn.cursor()
 >>> cursor.execute("grant replication slave on *.* to 'slave0'@'%'")
 0
 # mysql:
 mysql> show grants for 'li'@'%';
 +-----------------------------------------+
 | Grants for li@%                         |
 +-----------------------------------------+
 | GRANT ALL PRIVILEGES ON *.* TO 'li'@'%' |
 +-----------------------------------------+
 1 row in set (0.01 sec)
(3)使用python将数据库锁定
 # python
 >>> cursor.execute("flush tables with read lock")
 0

mysql执行插入语句会宕机不动

(4)使用python将数据库解锁
 # python
 >>> cursor.execute("unlock tables")
 0

mysql执行语句立马执行成功

(5)使用普通用户连接数据库查看master状态
 # python
 >>> conn=pymysql.connect(host="10.0.0.57",port=3306,database="test",user="li",password="li");
 >>> cursor=conn.cursor()
 >>> cursor.execute("show master status")
 1
 >>> print(cursor.fetchall())
 (('binlog.000001', 154, '', '', ''),)

5、编辑python脚本自动化操纵mysql数据库

 [root@python ~]# vim test0.py
 import pymysql
 conn=pymysql.connect(host="10.1.1.15",port=3306,database="test",user="root",password="root");
 cursor=conn.cursor()
 cursor.execute("create user 'slave2'@'%' identified by 'slave2'")
 cursor.execute("grant replication slave on *.*  to 'slave2'@'%'")
 cursor.execute("flush privileges")
 cursor.execute("flush tables with read lock")
 cursor.execute("show master status")
 print(cursor.fetchall())
 isOk=input("slave server ok? y/n")
 if isOK=='y':
     cursor.execute("unlock tables")

下午

1、创建mysql57从数据库并进行数据同步

 主数据库:
 [root@mysql57 ~]# chkconfig --add mysql57      //设置开机自启
 [root@mysql57 ~]# chkconfig mysql57 on
 [root@mysql57 ~]# rm -rf /usr/local/mysql/data/auto.cnf 
 [root@mysql57 ~]# service mysql57 stop
 Shutting down MySQL.. SUCCESS! 
 [root@mysql57 ~]# yum -y install rsync
 [root@mysql57 ~]# rsync -av /usr/local/mysql/data root@10.0.0.58:/usr/local/mysql/
 [root@mysql57 ~]# service mysql57 start
 Starting MySQL. SUCCESS! 
 [root@mysql57 ~]# mysql57 -p'123'
 mysql> flush tables with read lock; 
 Query OK, 0 rows affected (0.01 sec)
 mysql> show master status;
 +---------------+----------+--------------+------------------+-------------------+
 | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 +---------------+----------+--------------+------------------+-------------------+
 | binlog.000002 |      154 |              |                  |                   |
 +---------------+----------+--------------+------------------+-------------------+
 1 row in set (0.00 sec)
 从数据库:
 [root@slavemysql ~]# systemctl stop firewalld
 [root@slavemysql ~]# systemctl disable firewalld
 Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
 Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
 [root@slavemysql ~]# tar -zxf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz 
 [root@slavemysql ~]# cp -r mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql
 [root@slavemysql ~]# mkdir /usr/local/mysql/mysql-files
 [root@slavemysql ~]# useradd -r -s /sbin/nologin mysql
 [root@slavemysql ~]# chown mysql:mysql /usr/local/mysql/mysql-files/
 [root@slavemysql ~]# chmod 750 /usr/local/mysql/mysql-files/
 [root@slavemysql ~]# yum -y install rsync
 [root@slavemysql ~]# ls /usr/local/mysql/
 bin/           include/       man/           share/         
 data/          lib/           mysql-files/   support-files/ 
 docs/          LICENSE        README
 [root@slavemysql ~]# rm -rf /etc/my.cnf
 [root@slavemysql ~]# vim /usr/local/mysql/my.cnf
 [mysqld]
 basedir=/usr/local/mysql
 datadir=/usr/local/mysql/data
 socket=/tmp/mysql.sock
 activate_all_roles_on_login=on
 port=3310
 log-error=/usr/local/mysql/data/db01-slave.err
 relay-log=/usr/local/mysql/data/relaylog
 server-id=11
 character_set_server=utf8mb4
 [root@slavemysql ~]# service mysql57 start
 [root@slavemysql ~]# chkconfig --add mysql57
 [root@slavemysql ~]# chkconfig mysql57 on
 [root@slavemysql ~]# mysql -p'123'
 mysql> change master to master_host="10.0.0.57",master_user="slave0",master_password=="123",master_log_file="binlog.000002",master_log_pos=154;
 Query OK, 0 rows affected, 2 warnings (0.01 sec)
 mysql> start slave;
 Query OK, 0 rows affected (0.00 sec)
 mysql> show slave status\G
 *************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 10.0.0.57
                   Master_User: slave0
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: binlog.000002
           Read_Master_Log_Pos: 154
                Relay_Log_File: relaylog.000002
                 Relay_Log_Pos: 317
         Relay_Master_Log_File: binlog.000002
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes

2、同步后测试同步是否成功

 从数据库同步完成后主数据库向数据库表中插入数据测试:
 mysql> unlock tables;
 Query OK, 0 rows affected (0.00 sec)
 mysql> use test;
 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 * from user;
 +----+----------+----------+
 | id | username | password |
 +----+----------+----------+
 |  1 | aaa      | aaa      |
 |  2 | bbbb     | bbbb     |
 +----+----------+----------+
 2 rows in set (0.00 sec)
 mysql> insert into user values(3,'ccccc','ccccc');
 Query OK, 1 row affected (0.01 sec)
 从同步完成后从数据库检查是否同步成功:
 mysql> show databases;
 +--------------------+
 | Database           |
 +--------------------+
 | information_schema |
 | mysql              |
 | performance_schema |
 | sys                |
 | test               |
 +--------------------+
 5 rows in set (0.01 sec)
 mysql> use test;
 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 * from user;
 +----+----------+----------+
 | id | username | password |
 +----+----------+----------+
 |  1 | aaa      | aaa      |
 |  2 | bbbb     | bbbb     |
 |  3 | ccccc    | ccccc    |
 +----+----------+----------+
 3 rows in set (0.01 sec)

3、学习MyCat插件

(1)了解MyCat

MyCat 是一个开源的分布式数据库中间件。

它的主要作用是实现数据库的分布式扩展和数据分片。通过 MyCat,可以将一个大型数据库系统拆分成多个小型的逻辑数据库,从而提高数据库的性能、可用性和可扩展性。

例如,如果一个数据库中的表数据量非常大,查询性能下降,通过 MyCat 可以将该表的数据按照一定的规则(如按照主键范围、哈希值等)分布到多个数据库节点上,从而减轻单个节点的负载,提高查询效率。

MyCat 还支持读写分离,将读操作分发到从库,写操作发送到主库,以平衡数据库的读写压力。

此外,它提供了一些高级功能,如数据的聚合、排序、分页等,使得在分布式环境下进行复杂的数据库操作变得更加容易。

总之,MyCat 为解决数据库在大规模数据处理和高并发访问场景下的性能和扩展问题提供了有效的解决方案。

(2)配置MyCat

1、添加一个新的虚拟主机,设置ip为10.0.0.60,主机名为mycat,关闭防火墙

2、上传jdk和mycat安装包

3、解压并且添加到指定的位置

1)安装配置jdk,制造mycat启动环境
 [root@mycat ~]# systemctl stop firewalld
 [root@mycat ~]# systemctl disable firewalld
 [root@mycat ~]# ls
 anaconda-ks.cfg             Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
 jdk-8u192-linux-x64.tar.gz  v
 [root@mycat ~]# tar -xf jdk-8u192-linux-x64.tar.gz 
 [root@mycat ~]# tar -xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz 
 [root@mycat ~]# cp -r jdk1.8.0_192/ /usr/local/jdk
 [root@mycat ~]# cp -r mycat/ /usr/local/
 [root@mycat ~]# ls /usr/local/jdk/
 bin             lib          src.zip
 COPYRIGHT       LICENSE      THIRDPARTYLICENSEREADME-JAVAFX.txt
 include         man          THIRDPARTYLICENSEREADME.txt
 javafx-src.zip  README.html
 jre             release
 [root@mycat ~]# sed -i '$aexport JAVA_HOME=/usr/local/jdk' /etc/profile
 [root@mycat ~]# source /etc/profile
 [root@mycat ~]# $JAVA_HOME
 -bash: /usr/local/jdk: 是一个目录
 [root@mycat ~]# sed -i '$aexport PATH=$PATH:$JAVA_HOME/bin' /etc/profile
 [root@mycat ~]# source /etc/profile
 [root@mycat ~]# $PATH
 -bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/jdk/bin: 没有那个文件或目录
 [root@mycat ~]# javac -version 
 javac 1.8.0_192
2)测试启动mycat到控制台
 [root@mycat ~]# ls /usr/local/mycat/
 bin  catlet  conf  lib  logs  version.txt
 [root@mycat ~]# ll /usr/local/mycat/
 总用量 12
 drwxr-xr-x. 2 root root  190 8月  15 15:19 bin
 drwxr-xr-x. 2 root root    6 8月  15 15:19 catlet
 drwxr-xr-x. 4 root root 4096 8月  15 15:19 conf
 drwxr-xr-x. 2 root root 4096 8月  15 15:19 lib
 drwxr-xr-x. 2 root root    6 8月  15 15:19 logs
 -rwxr-xr-x. 1 root root  219 8月  15 15:19 version.txt
 [root@mycat ~]# ls /usr/local/mycat/bin/
 mycat      
 [root@mycat ~]# /usr/local/mycat/bin/mycat console
 Running Mycat-server...
 jvm 1    | MyCAT Server startup successfully. see logs in logs/mycat.log
 |
3)查看修改mycat配置文件
 [root@mycat ~]# ls /usr/local/mycat/conf/
 schema.xml    server.xml
 [root@mycat ~]# vim /usr/local/mycat/conf/server.xml

 [root@mycat ~]# vim /usr/local/mycat/conf/schema.xml  //配置真实数据库信息

4)启动mycat服务,实现数据库读写分离
 [root@mycat ~]# /usr/local/mycat/bin/mycat start
 Starting Mycat-server...
 [root@mycat ~]# netstat -lnput | grep 8066
 tcp6       0      0 :::8066                 :::*                    LISTEN      11528/java   
5)mycat服务测试,使用mycat连接数据库并添加一条表记录
 [root@mysql57 ~]# mysql -h10.0.0.60 -P8066 -uli -p'li'
 mysql> show databases;
 +----------+
 | DATABASE |
 +----------+
 | test     |
 +----------+
 1 row in set (0.01 sec)
 mysql> use test;
 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 * from user;
 +----+----------+----------+
 | id | username | password |
 +----+----------+----------+
 |  1 | aaa      | aaa      |
 |  2 | bbbb     | bbbb     |
 |  3 | ccccc    | ccccc    |
 +----+----------+----------+
 3 rows in set (0.01 sec)
 mysql> show variables like "server_id";
 +---------------+-------+
 | Variable_name | Value |
 +---------------+-------+
 | server_id     | 10    |
 +---------------+-------+
 1 row in set (0.02 sec)
 mysql> insert into user values(4,'ddd','ddd');
 Query OK, 1 row affected (0.06 sec)
6)mycat服务测试,使用从服务器查看是否同步数据
 从数据库
 mysql> select * from user;
 +----+----------+----------+
 | id | username | password |
 +----+----------+----------+
 |  1 | aaa      | aaa      |
 |  2 | bbbb     | bbbb     |
 |  3 | ccccc    | ccccc    |
 |  4 | ddd      | ddd      |
 +----+----------+----------+
 4 rows in set (0.00 sec)
7)mycat服务测试,使用Navicat工具连接mycat查看数据库信息

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

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

相关文章

详解最大比合并算法(Maximum Ratio Combining)

目录 一. 空间分集(space diversity) 二. 系统模型 三. 尝试性译码 3.1 选择性合并算法(selection combining) 3.2 简单相加 四. 最大比合并算法 4.1 合并信号 4.2 设计权重值w 五. 波束赋形 5.1 小结 5.2 与波束赋形的…

牛客小白月赛98

牛客小白月赛98 A 骰子魔术 链接:https://ac.nowcoder.com/acm/contest/85598/A 来源:牛客网 题目描述 jackle 正在给他的朋友表演一个关于骰子的魔术: jackle 会拿出一枚骰子,骰子的表面分别写上了从 1∽500 的数字&#xff0c…

Hadoop环境安装及HDFS初步使用

一、Hadoop原理 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distr…

【深度学习】【语音TTS】GPT-SoVITS v2 实战,训练一个人的音色,Docker镜像

文章目录 原理Dockerdocker push训练教程: https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/xyyqrfwiu3e2bgyk 原理 Docker 不用docker不行,不好分配显卡, 做个docker镜像: docker pull pytorch/pytorch:2.1.2

【数据结构与算法 | 图篇】Dijkstra算法(单源最短路径算法)

1. 前言 由图: 如果我们想要求得节点1到节点5(也可以是其他节点)的最短路径,我们可以使用Dijkstra算法。 2. 步骤与思路 1. 将所有顶点标记为未访问(顶点类的visited属性设置为false)。创建一个未访问顶点的集合。 2. 为每个顶…

Web开发:使用Abp.AutoMapper进行实体映射的demo

控制台程序为例&#xff0c;展示该demo 一、安装Nuget包 二、文件结构 三、AutoMapperProfile.cs&#xff08;映射规则&#xff09; using AutoMapper;namespace ConsoleApp1 {public class AutoMapperProfile : Profile{public AutoMapperProfile(){CreateMap<Student, T…

面向新人的 Java 面试问题(1-50)

1. Java 是否独立于平台&#xff1f;如果是&#xff0c;那么如何独立&#xff1f; 是的&#xff0c;Java 是一种独立于平台的语言。与许多编程语言不同&#xff0c;javac 将程序编译为字节码或 .class 文件。此文件独立于正在运行的软件或硬件&#xff0c;但需要在操作系统中预…

--- java 包装类 泛型 ---

包装类 因为在java中基本类型&#xff08;int char...&#xff09;不是继承值Object类&#xff0c;为了满足泛型的需要&#xff0c;于是给每种基本类型都设计了对应的包装类 基本类型包装类intInteger char CharacterbyteByteShortShortfloatFloatdoubleDoublelongLongboolea…

mars3D引用模型库以及图标配置

文章目录 一、icon总结 一、icon 引入基本场景后 还差几个样式引入 mars3D图标用的 https://fontawesome.dashgame.com/ 引入对应的 <link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"&…

WebGIS开发中一些常见的概念

0. 坐标系投影 地理坐标系和投影坐标系是两种常用的坐标系统&#xff0c;它们各自有着独特的特性和应用场景。 0.1 地理坐标系 地理坐标系(Geographic Coordinate System&#xff0c; 简称 GCS)是以地球椭球体面为参考面&#xff0c;以法线为依据&#xff0c;用经纬度表示地…

双指针| Java | (hot100) 力扣283, 11, 15, 42做题总结

leetcode 11 盛最多水的容器 双层for循环暴力 超出时间限制 class Solution {public int maxArea(int[] height) {int h0;int v0;for(int i0; i<height.length; i) {for(int ji1; j<height.length; j) {h Math.min(height[i],height[j]);v Math.max(v, h*(j-i));}}…

【原创公式】【完全二叉树】叶结点的计算【数据结构】

完全二叉树叶结点的计算 【铺垫】1叶结点即度为0的结点 2完全二叉树中度为1的结点只可能有0或1个 3完全二叉树的设叶结点仅可能出现在最后2层 设有完全二叉树T 【区分】第k层有a个叶结点≠第k层有a个结点 &#xff08;1&#xff09;第k层有a个叶结点&#xff1a;T的形态不唯一&…

Mac电脑虚拟机安装win11教程

Mac分享吧 文章目录 效果一、准备工作二、安装步骤方法1&#xff1a;使用虚拟机自带的win11系统&#xff0c;选中系统软件--继续--安装&#xff0c;即可完成win11安装方法2&#xff1a;通过下载好的镜像安装Windows11系统。选择镜像文件位置&#xff0c;安装&#xff0c;配置1…

MySQL进阶-MySQL管理

系统数据库 常用工具 mysql mysqladmin mysqlbinlog mysqlshow mysqldump mysqlimport/source

数据预处理和探索性数据分析(上)

目录 数据预处理 数据清洗 处理缺失值&#xff1a; 异常值检测与处理&#xff1a; 类别特征编码&#xff1a; 特征工程 创建新特征&#xff1a; 特征缩放&#xff1a; 探索性数据分析 (EDA) 使用Matplotlib进行可视化 绘制直方图&#xff1a; 绘制箱线图&#xff1…

this内存原理,成员变量和局部变量的区别

this的作用&#xff1a;区分局部变量和成员变量 this的本质&#xff1a;所在方法调用者的地址值 内存分布&#xff0c;this会保存地址 this.name name 等号的右边触发就近原则接收形参 把接收到的形参赋值给成员变量的name 成员变量&#xff0c;类方法外的变量&#xff0c…

一刷代码随想录(DP10)

115.不同的子序列 题意&#xff1a;给定一个字符串 s 和一个字符串 t &#xff0c;计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指&#xff0c;通过删除一些&#xff08;也可以不删除&#xff09;字符且不干扰剩余字符相对位置所组成的新字符串。&#xff08;…

这本跨界生意经,南方黑芝麻还是暂时放下了

南方黑芝麻的跨界故事还是难讲通。 近期&#xff0c;南方黑芝麻对外称&#xff0c;公司决定暂缓新能源储能项目建设。据悉&#xff0c;2023年&#xff0c;黑芝麻拟让下属全资子公司——江西小黑小蜜食品有限责任公司转型经营储能锂电池&#xff0c;并加码建设储能锂电池生产基…

计算机毕业设计 美发管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

乘法逆元加练

前言&#xff1a;求乘法的逆元就是 n ^ (p-2), 我们平时乘以这个也是为了 #include<bits/stdc.h> using namespace std;#define int long long int n,p;int qw(int x,int num){int ans 1;while(num){if(num&1) ans ans * x % p;x x*x % p;num>>1;}return an…