MySQL高级三
目录
三、MySQL高级03
3.1 MyCat
3.1.1 MyCat简介
3.1.2 中间件的作用
3.2 安装MyCat
3.3 主从复制
3.3.1 主从复制的原理
3.3.2 主从复制的好处
3.3.3 配置主从复制
三、MySQL高级03
如果虚拟机的磁盘已满,可以对磁盘进行重新分配
参考:虚拟机扩展磁盘与增加磁盘操作_虚拟机新增磁盘_石头城12345的博客-CSDN博客
3.1 MyCat
3.1.1 MyCat简介
Mycat 是数据库中间件。 java->mycat->mysql
1 Cobar属于阿里B2B事业群,始于2008年,在阿里服役3年多,接管3000+个MySQL数据库的schema,集群日处理在线SQL请求50亿次以上。由于Cobar发起人的离职,Cobar停止维护。 2 Mycat是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许多新的功能在其中。青出于蓝而胜于蓝。 3 OneProxy基于MySQL官方的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件。舍弃了一些功能,专注在性能和稳定性上。 4 kingshard由小团队用go语言开发,还需要发展,需要不断完善。 5 Vitess是Youtube生产在使用,架构很复杂。不支持MySQL原生协议,使用需要大量改造成本。 6 Atlas是360团队基于mysql proxy改写,功能还需完善,高并发下不稳定。 7 MaxScale是mariadb(MySQL原作者维护的一个版本) 研发的中间件 8 MySQLRoute是MySQL官方Oracle公司发布的中间件
3.1.2 中间件的作用
1、读写分离
2、数据分片
垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表)
3、多数据源整合
4、原理
Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
这种方式把数据库的分布式从代码中解耦出来,用户察觉不出来后台使用Mycat 还是MySQL。
3.2 安装MyCat
注:使用mycat1.6的应用于要求
jdk版本在1.7以上
mysql版本支持5.+,不支持8.+
mysql版本如果不正确,会一直报错
Can't connect to MySQL server on'XXXXX'
1、安装wget
-- 使用yum安装wget
yum -y install wget
Installed:wget.x86_64 0:1.14-18.el7_6.1
Complete!
2、使用wget下载MyCat压缩包
wget http://dl.mycat.org.cn/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
3、解压安装包
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
4、配置环境变量
-- 进入配置文件
vim /etc/profile
-- 配置MyCat的环境变量
export MYCAT_HOME=/usr/lwl/soft/mycat/mycat
export PATH=$MYCAT_HOME/bin:$PATH
配置完之后使配置文件生效
source /etc/profile
5、修改server.xml
vim /usr/lwl/soft/mycat/mycat/conf/server.xml
1、端口号在第33行,默认为8066(不用进行修改)
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
2、修改root用户密码(第81行)
原始密码:123456 修改后的密码root
6、修改schema.xml
方式一:
修改配置文件 schema.xml
删除<schema>标签间的表信息,<dataNode>标签只留一个,
<dataHost>标签只留一个,<writeHost>
<readHost>只留一对
方式二:
或者将原本的schema.xml文件更名为schema-bak.xml
再建一个新的文件名为schema.xml,内容如下:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><!--这里的TESTDB对应server.xml文件中的property标签--><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"><!--表名为test1,这张表在数据库test中一定要存在--><table name="test1" dataNode="dn1" /></schema><!--节点名字为dn1,dataHost对应下面的dataHost标签,database是指明数据库--><dataNode name="dn1" dataHost="localhost1" database="test" /><!--数据库的一些信息,比如dbType="mysql"是说数据库类型是mysql--><dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><!--一直在运行的时候,使用的是user--><heartbeat>select user()</heartbeat><!--用来进行数据库写操作的主机信息,默认的用户名和密码都是root--><writeHost host="hostM1" url="192.168.111.127:3306" user="root" password="密码"><!--用来进行数据库读操作的主机信息,默认的用户名和密码都是root--><readHost host="hostS2" url="192.168.111.128:3306" user="root" password="密码"></readHost></writeHost></dataHost>
</mycat:schema>
配置完成后,要赋予新的schema.xml文件高级权限
chmod 777 schema.xml
schema文件解释:
引用:使用Mycat实现数据库读写分离 - 简书
1、schema 解释 <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> name属性:表示的是逻辑库的名字,是应用程序连接的时候的数据库名称. checkSQLschema属性:当该值设置为 true 时,如果我们执行语句select * from TESTDB.travelrecord;则 MyCat 会把语句修改为select * from travelrecord;。即把表示 schema 的字符去掉,避免发送到后端数据库执行时报(ERROR 1146 (42S02): Table ‘testdb.travelrecord’ doesn’t exist)。 sqlMaxLimit属性:当该值设置为某个数值时。每条执行的 SQL 语句,如果没有加上 limit 语句,MyCat 也会自动的加上所对应的值。例如设置值为 100,执行select * from TESTDB.travelrecord;的效果为和执行select * from TESTDB.travelrecord limit 100;相同。设置该值的话,MyCat 默认会把查询到的信息全部都展示出来,造成过多的输出。所以,在正常使用中,还是建议加上一个值,用于减少过多的数据返回。 当然 SQL 语句中也显式的指定 limit 的大小,不受该属性的约束。 需要注意的是,如果运行的 schema 为非拆分库的,那么该属性不会生效。需要手动添加 limit 语句 2、table标签解释 <table name="test1" dataNode="dn1" /> Table 标签定义了 MyCat 中的逻辑表,所有需要拆分的表都需要在这个标签中定义。 name 属性:定义逻辑表的表名,这个名字就如同我在数据库中执行 create table 命令指定的名字一样,同个 schema 标签中定义的名字必须唯一。 dataNode属性:定义这个逻辑表所属的 dataNode, 该属性的值需要和后面 dataNode 标签中 name 属性的值相互对应。 3、dataNode标签解释 <dataNode name="dn1" dataHost="localhost1" database="test" /> dataNode 标签定义了 MyCat 中的数据节点,也就是我们通常说所的数据分片。一个 dataNode 标签就是一个独立的数据分片。 name 属性:定义数据节点的名字,这个名字需要是唯一的,我们需要在table 标签上应用这个名字,来建立表与分片对应的关系。 dataHost 属性:该属性用于定义该分片属于哪个数据库实例的,属性值是引用 dataHost 标签上定义的 name 属性。 database 属性:该属性用于定义该分片属性哪个具体数据库实例上的具体库,因为这里使用两个纬度来定义分片,就是:实例+具体的库。因为每个库上建立的表和表结构是一样的。所以这样做就可以轻松的对表进行水平拆分。 4、dataHost标签解释 <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 作为 Schema.xml 中最后的一个标签,该标签在 mycat 逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。 name 属性:唯一标识 dataHost 标签,供上层的标签使用 maxCon 属性:指定每个读写实例连接池的最大连接。也就是说,标签内嵌套的 writeHost、readHost 标签都会使用这个属性的值来实例化出连接池的最大连接数 minCon 属性:指定每个读写实例连接池的最小连接,初始化连接池的大小 balance 属性: 负载均衡类型,目前的取值有 3 种: balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。 balance="1",全部的 readHost 与 stand by writeHost参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载 均衡。 balance="2",所有读操作都随机的在 writeHost、readhost 上分发。 balance="3",所有读请求随机的分发到 wiriterHost 对应的readhost 执行,writerHost 不负担读压力, 注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。 writeType 属性: 负载均衡类型,目前的取值有 3 种: ① writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties . ② writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。switchType 属性 -1 表示不自动切换。 1 默认值,自动切换。 2 基于 MySQL 主从同步的状态决定是否切换。 dbType 属性:指定后端连接的数据库类型,目前支持二进制的 mysql 协议,还有其他使用 JDBC 连接的数据库。例如:mongodb、oracle、spark 等。 dbDriver 属性:指定连接后端数据库使用的 Driver,目前可选的值有 native 和 JDBC。使用 native 的话,因为这个值执行的是二进制的 mysql 协议,所以可以使用 mysql 和 maridb。其他类型的数据库则需要使用 JDBC 驱动来支持。 从 1.6 版本开始支持 postgresql 的 native 原始协议。 如果使用 JDBC 的话需要将符合 JDBC 4 标准的驱动 JAR 包放到MYCAT\lib 目录下,并检查驱动 JAR 包中。 包括如下目录结构的文件:META-INF\services\java.sql.Driver。在这个文件内写上具体的 Driver 类名,例如: com.mysql.jdbc.Driver。 5、heartbeat标签解释 <heartbeat>select user()</heartbeat> 这个标签内指明用于和后端数据库进行心跳检查的语句。例如,MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。 6、writeHost 标签、readHost 标签解释 这两个标签都指定后端数据库的相关配置给 mycat,用于实例化后端连接池。唯一不同的是,writeHost 指定写实例、readHost 指定读实例,组着这些读写实例来满足系统的要求。在一个 dataHost 内可以定义多个 writeHost 和 readHost。 但是,如果 writeHost 指定的后端数据库宕机,那么这个 writeHost 绑定的所有 readHost 都将不可用。另一方面,由于这个 writeHost 宕机系统会自动的检测到,并切换到备用的 writeHost 上去。 host 属性:用于标识不同实例,一般 writeHost 我们使用M1,readHost 我们用S1。 url 属性:后端实例连接地址,如果是使用 native 的 dbDriver,则一般为 ipaddress:port 这种形式。用 JDBC 或其他的dbDriver,则需要特殊指定。当使用 JDBC 时则可以jdbc:mysql://localhost:3306/。 user 属性:后端存储实例需要的用户名字。 password 属性:后端存储实例需要的密码。
7、修改服务器名字(可以不修改)
修改前:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#主机修改后:
# 这里的hostM1对应schema.xml中的writeHost标签
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 hostM1
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 hostM1
192.168.111.127 hostM1
#从机修改后
# 这里的hostM1对应schema.xml中的readHost标签
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 hostS1
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 hostS1
192.168.111.128 hostS1
8、开启主机(127)mycat
1、使用窗口(A)进入到mycat中的logs文件中 /usr/lwl/soft/mycat/mycat/logs
2、展示其中的日志文件
[root@hostM1 logs]# ls
2023-02 2023-03 console.log mycat.log mycat.pid wrapper.log
3、动态显示日志文件
tail -f wapper.log
4、然后再开启一个窗口(B)开启mycat
开启命令:mycat start
5、在窗口(A)中的日志中可以观察到
MyCAT Server startup successfully. see logs in logs/mycat.log
即是mycat开启成功
9、连接mycat
mysql -uroot -proot -h192.168.111.127 -P8066 -DTESTDB
-u 代表输入用户
-p 代表密码
-h 代表IP地址
-P 代表端口号
-D 代表连接的数据库名称
10、测试是否连接成功
向TESTDB数据库的test1表中添加一条数据
切换到192.168.111.127的mysql数据库,查看test1的表中是否有相应的数据,如果有就代表读写分离成功
测试读写:
连接mycat的mysql,进行添加个查询操作,并且查看操作日志
3.3 主从复制
3.3.1 主从复制的原理
mysql要做到主从复制,其实依靠的是二进制日志,即:假设主服务器叫Master,从服务器叫Slave;主从复制就是Slave跟着Master学,Master做什么,Slave就做什么。 那么Slave怎么同步Master的动作呢?现在Master有一个日志功能,把自己所做的增删改查的动作全都记录在日志中,Slave只需要拿到这份日志,照着日志上面的动作施加到自己身上就可以了。这样就实现了主从复制,具体实现如下图:
3.3.2 主从复制的好处
1) 实现服务器负载均衡
2) 通过复制实现数据的异地备份
3) 提高数据库系统的可用性
3.3.3 配置主从复制
1、配置主从复制的要求
1、配置主从复制要求主机、从机安装相同版本的mysql
2、主机、从机的mysql中都需要有远程连接的权限
3、两台服务器都关闭防火墙systemctl stop firewalld4、主机和从机能够互相连通(能ping通)在主机127执行:ping 192.168.111.128在从机128执行:ping 192.168.111.127
2、两台主机都开启mysql服务
systemctl start mysqld 或者 service mysqld start
3、修改mysql的配置文件 (/etc/my.cnf)
主机:修改192.168.111.127的配置文件
[mysqld] # 一定要在这下面配置
log-bin=mysql-bin # 二进制的文件
server-id=127 # 唯一的标识 默认是1
从机:修改192.168.111.128的配置文件
[mysqld] # 一定要在这下面配置
log-bin=mysql-bin # 二进制的文件
server-id=128 # 唯一的标识 默认是1
注:
1、可以只在一台服务器上配置即可,一定要保证主机和从机的server-id不一样
2、log-bin可以不写,会有默认的名字
4、重启mysql服务
systemctl restart mysqld 或者 service mysqld restart
5、主机(127)连接mysql查看主机的状态
show master status;
6、从机(128)连接mysql配置对应的主机信息
连接mysql后,配置对应的主机信息,
主机的ip地址,主机的用户名和密码,二进制文件名字和位置
change master to master_host='192.168.111.127',
master_user='root',master_password='root',
master_log_file='mysql-bin.000001',master_log_pos=154;
7、启动从机
-- 启动从机
start slave;
-- 查看从机状态
show slave status\G;
问题1、Slave_IO_Running: No
解决uuid相同的问题
1、可以先查看两台服务器的uuid
show variables like '%server_uuid%';
2、查找auto.cnf
find / -name auto.cnf
3、这个文件可以修改任何一个数字,也可以直接删除
这里修改了从机(128)的配置文件
[auto] #修改前
server-uuid=647f2cac-b7ff-11ed-aefd-000c29102664
[auto] #修改后 将倒数第五位的0改为7
server-uuid=647f2cac-b7ff-11ed-aefd-000c29172664
修改后可以先停止从机
stop slave;
重启主机和从机的mysql服务
systemctl restart mysqld;
再开启从机
start slave;
问题2、Slave_IO_Running: Connecting
出现上图就是连接不上主机:
1、防火墙没有关闭
2、主机的用户名和密码不对
3、日志文件的名字不对
4、pos的值不对
先停止从机:
stop slave;
重启主机和从机的mysql服务
systemctl restart mysqld;
再开启从机
start slave;
再排除情况
可以先查看日志文件名字是否更改
8、验证主从复制是否成功
在主机中test库中test1表中添加一条数据
然后在从机的test库中的test1表进行查询,能查到就代表配置成功
相关文章:
MySQL高级三
目录 三、MySQL高级03 3.1 MyCat 3.1.1 MyCat简介 3.1.2 中间件的作用 3.2 安装MyCat 3.3 主从复制 3.3.1 主从复制的原理 3.3.2 主从复制的好处 3.3.3 配置主从复制 三、MySQL高级03 如果虚拟机的磁盘已满,可以对磁盘进行重新分配 参考:虚拟…...
set和map的基本使用
目录 关联式容器 要点分析 键值对 pair介绍 set 模板参数列表: set的构造: 常用接口 操作 multiset map map的构造 插入 make_pair map的迭代器 operator[] multimap multimap中为什么没有重载operator[] 关联式容器 关联式容器也是用…...
已解决pip install wxPython模块安装失败
已解决(pip install wxPython安装失败)error: legacy-instal1-failure Encountered error while trying to install package.wxPython note: This is an issue with the package mentioned above,not pip. hint : See above for output from …...
Linux基础——连接Xshell7
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…...
C++——智能指针1
目录 RAII auto_ptr模拟实现 智能指针拷贝问题 唯一指针 shared_ptr(可以拷贝) shared_ptr模拟实现 完整代码 循环引用 weak_ptr模拟实现 定制删除器 shared_ptr定制删除器模拟实现 内存泄漏 RAII RAII(Resource Acquisit…...
[数据集][VOC][目标检测]翻越栏杆翻越防护栏数据集目标检测可用yolo训练-1035张介绍
数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1035 标注数量(xml文件个数):1035 标注类别数:2 标注类别名称:["fylg","…...
深度学习 | BN层原理浅谈
深度学习 | BN层原理浅谈 文章目录深度学习 | BN层原理浅谈一. 背景二. BN层作用三. 计算原理四. 注意事项为什么BN层一般用在线性层和卷积层的后面,而不是放在激活函数后为什么BN能抑制过拟合(有争议)一. 背景 神经网络在训练时,由于内存限制࿰…...
每日面试题
2022/12/15 如何实现一个IOC容器 1、配置文件配置包扫描路径 2、递归包扫描获取.class文件 3、反射、确定需要交给lOC管理的类4、对需要注入的类进行依赖注入 配置文件中指定需要扫描的包路径 定义一些注解,分别表示访问控制层、业务服务层、数据持久层、依赖注…...
将IDEA的项目托管到gitee
目录1. 在gitee上创建仓库2. 本地创建仓库目录3. 将项目添加到缓冲区4. 将缓冲区的项目添加到本地仓库5. 将本地仓库的项目上传到gitee6. 遇到的问题6.1 问题描述6.2 解决方法7. 相关图示与补充8. 相关参考1. 在gitee上创建仓库 2. 本地创建仓库目录 在IDEA中选择创建 Git 仓…...
父类子类静态代码块、构造代码块、构造方法执行顺序
github:https://github.com/nocoders/java-everything.git 名词解释 静态代码块:java中使用static关键字修饰的代码块,每个代码块只会执行一次,JVM加载类时会执行静态代码块中的代码,静态代码块先于主方法执行。构造代码块&#…...
【C++】开散列实现unordered_map与unordered_set的封装
本文主要介绍unordered_map与unordered_set的封装,此次封装主要用上文所说到的开散列,通过开散列的一些改造来实现unordered_map与unordered_set的封装 文章目录一、模板参数二、string的特化三、正向迭代器四、构造与析构五、[]的实现六、unordered_map的实现七、u…...
华为OD机试真题Python实现【删除指定目录】真题+解题思路+代码(20222023)
删除指定目录 题目 某文件系统中有 N 个目录, 每个目录都一个独一无二的 ID。 每个目录只有一个付目录, 但每个目录下可以有零个或多个子目录, 目录结构呈树状结构。 假设 根目录的 ID 为0,且根目录没有父目录 ID 用唯一的正整数表示,并统一编号 现给定目录 ID 和其付目…...
CSS选择器大全(上)
基础选择器: id选择器:#id{} 类选择器: .class{} 标签选择器: h1{} 复合选择器: 交集选择器:作用:选中同时符合多个条件的元素 语法:选择器1选择器2选择器3选择器n{} 注意ÿ…...
JavaScript 俄罗斯方块 - setTimeout和rAF
本节内容需要有些基础知识,如进程和线程,队列数据结构 一、setTimeout和setInterval 只要使用过JavaScript的朋友,对setTimeout和setInterval应该不会默生,如果光说怎样去使用这个API,并不难,无非就是隔多少毫秒再执行某个函数,把变化的内容封装在函数中,就可以制作出动…...
LeetCode:构造最大二叉树;使用中序和后序数组构造二叉树;使用前序和中序数组遍历二叉树。
构造二叉树最好都是使用前序遍历;中左右的顺序。 654. 最大二叉树 中等 636 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建…...
nodejs实现jwt
jwt是json web token的简称,本文介绍它的原理,最后后端用nodejs自己实现如何为客户端生成令牌token和校验token 1.为什么需要会话管理 我们用nodejs为前端或者其他服务提供resful接口时,http协议他是一个无状态的协议,有时候我们…...
结构体占用内存大小如何确定?-->结构体字节对齐 | C语言
目录 一、什么是结构体 二、为什么需要结构体 三、结构体的字节对齐 3.1、示例1 3.2、示例2 3.3、示例3 3.4、示例4 3.5、示例5 四、结构体字节对齐总结 一、什么是结构体 结构体是将不同类型的数据按照一定的功能需 求进行整体封装,封装的数据类型与大小均…...
Vue和Uniapp:优缺点比较
Vue和Uniapp是两个流行的前端框架,都是用于开发跨平台应用程序的工具。虽然两者都有很多相似之处,但它们也有一些不同之处,这些不同之处可以影响你的选择。下面将对Vue和Uniapp的优缺点进行比较和分析,以帮助你做出更明智的决策。…...
AMBA-AXI(二)AXI的序,保序与乱序
💡Note:本文是根据AXI协议IHI0022F_b_amba_axi_protocol_spec.pdf(issue F)整理的。主要是分享AXI3.0和4.0部分。如果内容有问题请大家在评论区中指出,有补充或者疑问也可以发在评论区,互相学习ὤ…...
APIs and Open Interface--非工单领、发料(含调拨)
表名 MTL_TRANSACTIONS_INTERFACEMTL_TRANSACTION_LOTS_INTERFACE序列 MTL_MATERIAL_TRANSACTIONS_S.NEXTVALAPIs INV_TXN_MANAGER_PUB.PROCESS_TRANSACTIONS案例 杂发/杂收(代码)Declare v_user_id number : fnd_global.user_id; v_login_id number …...
互联网医院系统软件开发|互联网医院管理系统开发的好处
互联网医院一直是现在的热门行业,很多的医院已经开发了互联网医院,并且已经在良好的运行中,而有一些医院和企业正在开发中,或者打算开发互联网医院系统,其实这些企业和医院还是很有远见的,因为他们知道并了…...
2.单例模式
基本概念 单例模式:保证一个类只有一个实例,并提供一个访问该实例的全局访问点 常见应用场景 读取配置文件的类一般设计为单例模式网站计数器应用程序的日志应用,因为共享日志文件一直处于打开状态,只能有一个实例去操作Spring…...
【保姆级】Java后端查询数据库结果导出xlsx文件+打印xlsx表格
目录前言一、需求一:数据库查询的数据导出成Excel表格1.1 Vue前端实现导出按钮点击事件1.2 后端根据数据库查询结果生成xlsx文件二、需求二:对生成的xlsx文件调用打印机打印2.1 Vue前端实现按钮事件2.2 后端实现打印前言 最近在弄一个需求,需…...
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
文章目录1 JDBC(Java Database Connectivity)1.1 什么是 JDBC?1.2 JDBC 核心思想2 JDBC开发步骤【重点】2.0 环境准备2.1 注册数据库驱动2.2 获取数据库的连接2.3 获取数据库操作对象Statement2.4 通过Statement对象执行SQL语句2.5 处理返回结…...
vue3生命周期
一、Vue3中的生命周期 1、setup() : 开始创建组件之前,在 beforeCreate 和 created 之前执行,创建的是 data 和 method 2、onBeforeMount() : 组件挂载到节点上之前执行的函数; 3、onMounted() : 组件挂载完成后执行的函数; 4、…...
Python学习笔记10:开箱即用
开箱即用 模块 python系统路径 import sys, pprint pprint.pprint(sys.path) [,D:\\Program Files\\Python\\Lib\\idlelib,D:\\Program Files\\Python\\python310.zip,D:\\Program Files\\Python\\DLLs,D:\\Program Files\\Python\\lib,D:\\Program Files\\Python,D:\\Progr…...
详解JAVA反射
目录 1.概述 2.获取Class对象 3.API 3.1.实例化对象 3.2.方法 3.3.属性 1.概述 反射,JAVA提供的一种在运行时获取类的信息并动态操作类的能力。JAVA反射允许我们在运行时获取类的属性、方法、构造函数等信息,并能够动态地操作它们。 2.获取Class…...
在nestjs中进行typeorm cli迁移(migration)的配置
在nestjs中进行typeorm cli迁移(migration)的配置 在学习nestjs过程中发现typeorm的迁移配置十分麻烦,似乎许多方法都是旧版本的配置,无法直接使用. 花了挺长时间总算解决了这个配置问题. db.config.ts 先创建db.config.ts, 该文件export了两个对象,其…...
前端工程构建问题汇总
1.less less-loader安装失败问题 npm install less-loader --save --legacy-peer-deps 加上–legacy-peer-deps就可以了 在NPM v7中,现在默认安装peerDependencies,这会导致版本冲突,从而中断安装过程。 –legacy-peer-deps标志是在v7中引…...
某马程序员NodeJS速学笔记
文章目录前言一、什么是Node.js?二、fs文件系统模块三、Http模块四、模块化五、开发属于自己的包模块加载机制六、Express1.初识ExpressGET/POSTnodemon2.路由模块化3.中间件中间件分类自定义中间件4. 跨域问题七、Mysql模块安装与配置基本使用Web开发模式Session认证JWT八、m…...
高端的环保行业网站开发/网络营销主要干什么
一个服务(service)通常指的是已知的接口或者抽象类,服务提供方就是对这个接口或者抽象类的实现,然后按spi标准存放到资源路径META-INF/services目录下,文件的命名为该服务接口的全限定名。如有一个服务接口com.test.Service,其服务…...
永久免费企业网站建设/深圳seo招聘
props.load(new FileInputStream("db.properties ")); 是读取当前目录的db.properties 文件 getClass.getResourceAsStream("db.properties "); 是读取当前类所在位置一起的db.properties 文件 getClass.getResourceAsStream("/db.properties ")…...
大连金州代做网站公众号/快速排名教程
马哲包括5大部分即唯物论,辩证法,认识论,历史唯物论,资本主义本质论。 其中辩证法又包括: 1.两大特征:(1)普遍联系(2)永恒发展。 2.三大规律:&…...
合肥做网站推广的公司/如何制作网站
前言 时长2H 应用原理理解; Java后端社招三年 JVM组成部分 堆 方法区(元数据区) 程序计数器 本地方法栈 虚拟机栈 虚拟机栈和本地方法栈区别(线程私有,每个线程都有一个) 本地方法栈和虚拟机栈的作用相同,用来描述方法执行的内存模型 即每个方法执行都会在栈上创建一个栈帧…...
郑州做品牌网站好的公司/站长之家爱站网
如果在本机用svn的一个帐户update和commite代码,并且选择了保存用户名和密码。 上面是一个假设,如果这个假设成立,当你准备换另一个svn的用户来update和commite的时候就遇到麻烦了,至少我是这样的,我逐次用一下办法解决…...
wordpress月份归档要收录吗/怎么弄自己的网站
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 背景: Android M上有个新功能,就是外插的microSD卡,就可以当做Internal storage,也可以当做Portable storage(和之前版本作为external storag那样使用). External microSD Card做Int…...