1 配置MYSQL主备同步
1.1 测试环境
mysql版本:5.6.24;
操作系统内核版本:Linux-3.13-0-32
主数据库IP:192.168.10.3;
主数据库名:db351353;
备用数据库IP:192.168.10.4;
备用数据库名:db351353。
1.2 配置主数据库
1.2.1 编辑my.cnf文件
#服务器唯一ID,一般取IP最后一段
server_id = 3
#启用二进制日志
log_bin=mysql_bin
#需要备份的数据库名 多个库以逗号分隔
Binlog_do_db =db351353
#若涉及及同步函数或者存储过程需要配置,否则主备会产生异常不能同步
log_bin_trust_function_creators=TRUE
1.2.2 重启数据库
# service myql.server restart
1.3 锁定主数据库DDL操作
mysql> flush tables with read lock;
1.4 主备已有数据同步
用navicat for mysql将主数据库数据同步到备数据库
1.5 停止从服务
mysql>stop slave;
1.6 配置备用数据库
1.6.1 编辑my.cnf文件
#服务器唯一ID,一般取IP最后一段
server_id = 4
1.6.2登录主数据库查看master状态
mysql>show master status;
1.6.3 执行change master to系列命令
mysql> change master to
master_host=’192.168.10.3′,
master_user=’iom’,–该用户要有Repl_slave_priv权限,没有可用grant replication slave on *.* to ‘iom’@’%’ identified by ‘xf4851213’授权
master_password=’123’,
master_log_file=’mysql_bin.000005’, –根据主服务器show master status出来的File结果填写
master_log_pos=1192; –根据主服务器show master status出来的Position结果填写
1.7 重启从服务
mysql>start slave;
1.8 解锁主数据库
mysql> unlock tables;
1.9 验证主从同步
在备份数据库上执行
mysql>show slave status;
slave_IO_running和slave_SQL_running 为yes。
主数据库新建一个表,往表里插入几条数据,备份数据库可以同步过来表和表中的数据。
2 配置MYSQL主主同步
2.1 测试环境
mysql版本:5.6.24;
操作系统内核版本:Linux-3.13-0-32
数据库A IP:192.168.10.3;
数据库B IP:192.168.10.4;
要同步的数据库名:db351353;db352354
2.2 编辑配置文件
2.2.1 A机配置文件
# vi my.cnf
#服务器唯一ID,一般取IP最后一段
server_id = 3
#启用二进制日志
log_bin=mysql_bin
#需要备份的数据库名
binlog_do_db =db351353
binlog_do_db =db352354
binlog_ignore_db=mysql
#若涉及同步函数或者存储过程需要配置,否则主备会产生异常不能同步
log_bin_trust_function_creators=TRUE
#同步参数: #保证slave挂在任何一台master上都会接收到另一个master的写入信息
log_slave_updates sync_binlog=1
# auto_increment_offset表示自增长字段从哪个数开始,两主机应一个奇数一个偶数。
auto_increment_offset=1
#auto_increment_increment表示自增长字段每次增长几位数,两主机应该一模一样
auto_increment_increment=2
#过滤掉一些没啥大问题的错误
slave_skip_errors=all
#需要进行同步的数据库.如果有多个数据库可使用多个replicate_do_db选项
replicate_do_db = db351353
replicate_do_db = db352354
#不需要同步的数据库.如果有多个数据库可使用多个replicate_ignore_db选项
replicate_ignore_db = mysql
replicate_ignore_db = information_schema
2.2.2 B机配置文件
# vi my.cnf
server_id = 4
log_bin=mysql_bin
binlog_do_db = db351353
binlog_do_db = db352354
binlog_ignore_db=mysql
replicate_do_db = db351353
replicate_do_db = db352354
log_bin_trust_function_creators=TRUE
replicate_ignore_db = mysql
replicate_ignore_db = information_schema
log_slave_updates
sync_binlog=1
auto_increment_offset=2 –此处与另一台机子不同
auto_increment_increment=2
slave_skip_errors=all
2.2.3 配置好my.cnf后,重启数据库A和B。
mysql>service mysql.server restart
2.3 执行配置命令
2.3.1 设置同步帐户
创建帐户并赋权
A机执行:
mysql> grant replication slave on *.* to ‘iomsync’@’192.168.10.4’ identified by ‘123’;
B机执行:
mysql> grant replication slave on *.* to ‘iomsync’@’192.168.10.3’ identified by ‘123’;
2.3.2 锁定数据库,查看主机服务状态
分别在A,B上执行:
mysql>flush tables with read lock;#防止进入新的数据
mysql>show master status;#查看主机服务状态
2.3.3 同步已有数据
使用navicat的数据传输功能同步数据,把源和目标两属性填写正确,左下角的数据库对象选择全选,点开始。
注意:同步时目标mysql必须先建好要同步的数据库。
2.3.4 指定同步位置
master_log_file和master_log_pos 两个参数根据2.4.2的show master status命令结果填写,master_log_file对应File,master_log_pos对应Position。
A上执行:
mysql>change master to master_host=’192.168.10.4’,master_user=’iomsync’,master_password=’123’, master_log_file=’mysql_bin.000024’,master_log_pos=3946;–填B机上的show master status结果
B上执行:
mysql>change master to
master_host=’192.168.10.3’,master_user=’ iomsync’,master_password=’123’, master_log_file=’mysql_bin.000008′,master_log_pos=8538;– 填A机上的show master status结果
2.3.5 解锁数据库
在A,B上分别执行
mysql> unlock tables;
2.3.6 启动从服务器线程
在A,B上分别执行
mysql> start slave;
如果启动报错:Slave failed to initialize relay log info structure from the repository,可以先执行mysql> reset slave;指令,然后再执行2.4.3指令。
2.3.7 查看从服务状态
在A,B上分别执行
mysql> show slave status;
结果集中Slave_IO_Running: Yes ,Slave_SQL_Running: Yes,就标识从服务启动成功。
2.4 执行配置命令(故障重启)
一般情况下,不论是mysql进程突然终止还是正常关闭,双主机部署可以在重启mysql后正常同步关机期间另一台主机上执行的写操作。但某些情况例外,比如Linux主机非正常关闭。例如A,B两台服务器主主同步,A服务器因掉电直接停机,A修复故障开机后,A机能正常同步B机的数据,但B机无法正常同步A机数据(B无法同步A对实际生产不会造成任何影响,因为此时客户端写操作都是在B上执行),A机上也没有Binlog Dump线程(见2.6.1),此时在B机上重新执行slave指令即可。
重启后的机子没有Binlog Dump线程,在另一台机上执行
mysql>stop slave;
mysql>start slave;
2,重启后的机子有Binlog Dump线程,不需做任何操作。
2.5 查看同步状态
2.5.1 查看同步线程
在A,B上分别执行
mysql> show processlist;
这两个是slave服务器与master服务器同步数据的线程,一个负责读取master的 Binlog Dump 线程发送的语句,并且把它们拷贝到其数据目录下的中继日志(relay logs)中,另一个负责读取中继日志,然后执行它们来更新数据。time字段显示最近的一次跟新离语句执行时的间隔时间,默认单位是秒。
这个线程是master服务器的Binlog Dump线程,负责给slave服务器发送更新日志。
2.5.2 强制数据同步
如果A机数据比B机新,要想让B机完全同步A机,可按如下操作:
在A机上执行:
mysql> flush tables with read lock;
mysql> show master status
记录下show语句输出中的复制坐标的值。
在 B机上执行:(参数使用上一步获得的值)
mysql> select master_pos_wait(‘log_name’, log_pos)
这个select语句会保持运行,直到slave根据指定的日志文件和位置完成和master的同步,然后该select语句返回。
在master执行:(解除更新限制)
mysql> unlock tables;
2.6 使用GTID同步
mysql在5.6版本后,加入了gtid同步功能,使用gtid同步,可以在执行change master to指令时不用手工指定master_log_file和master_log_pos,方便日常维护。
2.6.1 GTID配置步骤:
锁定表,A,B两机上执行(首次执行)
mysql>flush tables with read lock ;
A,B两机上编辑my.cnf文件,在原有主主配置基础上增加
gtid_mode=ON
enforce_gtid_consistency=ON
指定主库
A机:
mysql>change master to master_host=’192.168.10.4′,master_port=3306,master_user=’iomsync’,master_password=’123′,master_auto_position=1;
— master_port参数不能加单引号,否则会报语法错误。
B机:
mysql>change master to master_host=’192.168.10.3′,master_port=3306,master_user=’iomsync’,master_password=’123′,master_auto_position=1;
开启slave服务,A,B都执行
mysql>start slave;
查看同步状态
mysql>show slave status;
如果Auto_Position字段值为1,则已开启gtid复制。
2.6.2 GTID同步问题
不能使用下列语句:
mysql> create table test as select * from so where 1=1;
1786 – CREATE TABLE … SELECT is forbidden when @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1;.
事务内部不能执行创建删除临时表语句,但可以在事务外执行,且必须设置set autocommit = 1;
在同一事务中更新事务表与非事务表将导致多个GTID分配给同一事务;
2.7 一些问题
使用replicate_do_db和replicate_ignore_db时有一个隐患,跨库更新时会出错,如B机设置 replicate_do_db=db351353,在A机执行use mysql; update db351353.so set ……,B机不会同步这条update语句。网上介绍replicate_wild_do_table=db351353.%可解决此问题,但我机子上测试没解决。
MySQL官方文档Reference Manual,版本6.10关于主主复制问题描述:MySQL复制当前不支持master和slave之间的任何锁定协议来保证跨服务器分发更新的原子性。(原子性:作为事务一部分的所有步骤或者都发生,或者都不发生。) 举例来说,客户端A在master1上作了一个更新,与此同时,在这个更新传播到master2前,客户端B在master2上也作了一个与客户端A不同的更新,因此,当客户端A的更新到达master2,它要处理的表数据将不同于在master1上的,master2上的更新传播到master1上,也会面临同样的问题。这意味着,除非你确定你的更新与次序无关,或者在客户端代码中采取某些方法处理无序的更新,否则你不能把两个服务器连在一起做成双向复制。
这就决定我们在配置mycat时需将客户端的写请求分发到同一个数据库实例。
3 MYCAT安装与配置
3.1 MYCAT安装
解压mycat压缩包
#tar –xzvf Mycat-server-XXX-linux.tar.gz /usr/local/mycat
3.2 参数设置
重点介绍rule.xml schema.xml router.xml server.xml log4j.xml
3.2.1 rule.xml
分片规则配置文件,mycat支持的所有分片规则都在这个文件里。定义一个规则需要两个节点,一个是tableRule,一个是function。
以一致性哈希分片为例,function节点定义了分片规则的实现类与初始化参数和分片规则的算法名称。
属性name为规则算法名称
class为规则实现类
property子节点为初始化规则的参数,使用seed count virtualBucketTimes就可初始化一致性哈希规则
0
2
160
tableRule节点定义了分片规则名(注意此处是规则名,前面的function节点的name属性是算法名)rule子节点指定用来分片的数据库表字段和分片算法名,也就是前面的function节点的name属性。
id
murmur
任何自定义的分片规则也可以这样配置
3.2.2 server.xml
此文件用来配置mycat全局参数
节点
druidparser ,指定SQL解析器,默认是fdbparser,经测试druidparser效率更高
1 ,指定mycat自动序列号生成方式。0:在借助本地文件生成序列号,1:借助数据库生成序列号,更多信息请参考Mycat in action
8066 指定mycat服务端口号,mycat通过这个端口接收数据库客户端的访问请求。
另外还有一个9066端口没有出现在配置文件中,用来接收mycat监控命令、查询mycat运行状况、重新加载配置文件等。更多信息请参考Mycat in action。
节点
name属性指定mycat用户名
password
database_name
false
可以有多个user节点。
3.2.3 router.xml
、都配置成了一样的,而且都与要连接的数据库名保持一致 –>
dataNodeName
queryNode
3.2.4 schema.xml
其中checkSQLschema表明是否检查并过滤SQL中包含schema的情况,如逻辑库为 TESTDB,则可能写为select * from TESTDB.aaa,此时会自动过滤TESTDB,SQL变为select * from aaa,若不会出现上述写法,则可以关闭属性为false
primaryKey=”pk”
dataNode=”dataNodeName”
rule=”sharding-by-murmur”
authIncrement=”true”>
dataHost是节点主机名,在下面要出现的dataHost定义
database数据库名
–>
writeType=”0” dbType=”mysql” dbDriver=”native>
maxCon minCon分别是连接到物理数据库的最大最小连接数
balance 0表示不开启读写分离,1 表示除主写入节点外其它节点都参与读操作,2表示所有节点都参与写入操作
writetype 0表示当一个写节点失效,会自动切换到另一个,1表示随机分配写节点,如果某个写节点宕机,不影响服务,如果其恢复,会自动重新加入写节点集群。
dbType指定数据库类型
dbDriver只有两个取值,分别是native和jdbc。native为mycat自带驱动,只支持mysql,jdbc为使用jdbc实现连接数据库,指定什么数据库的jdbc驱动就可以访问什么数据库,更灵活,但效率不如native
可以有多个dataHost节点
–>
select 1
3.3 启动和使用MyCat
3.3.1 启动MyCat
注意:一定要先启动数据库,再启动mycat,否则mycat中配置的主从机顺传会混乱
# mycat console
3.3.2 访问MyCat
访问MyCat同访问MySQL的方式完全相同, 常用访问方式如下:
mysql –h 127.0.0.1 –u test –p test -P8066 –DTESTDB
3.3.3 自测
可以自己编写一些语句进行测试,看是否按规则进行分配。
4 KEEPALIVED配置
编辑/etc/keepalived/keepalived.cnf文件,红色字体是为mycat新加的
global_defs {
router_id LVS_MASTER #BACKUP上修改为LVS_BACKUP
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.252/24 #virtual server
192.168.10.253/24 #mycat
}
}
virtual_server 192.168.10.252 8080 {
delay_loop 6
lb_algo rr
lb_kind DR
#lb_kind NAT
# persistence_timeout 3
protocol TCP
real_server 192.168.10.3 8080 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 8080
}
}
real_server 192.168.10.4 8080 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 8080
}
}
}
virtual_server 192.168.10.253 8066 {
delay_loop 6
lb_algo rr
lb_kind DR
#lb_kind NAT
# persistence_timeout 3
protocol TCP
real_server 192.168.10.3 8066 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 8066
}
}
。
real_server 192.168.10.4 8066 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 8066
}
}
}
5 mycat服务器执行脚本
lvs_mycat.sh脚本内容:
#!/bin/bash
VIP=192.168.10.253
case “$1” in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce
echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo “lvs_vip server start ok!”;;
stop)
ifconfig lo:0 down
/sbin/route del $VIP >/dev/null 2>&1
echo “0” >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “0” >/proc/sys/net/ipv4/conf/lo/arp_announce
echo “0” >/proc/sys/net/ipv4/conf/all/arp_ignore
echo “0” >/proc/sys/net/ipv4/conf/all/arp_announce
echo “lvs_vip server stoped.”;;
*)
echo “arg start|stop.”
exit 1
esac
exit 0
在脚本所在目录执行#./lvs_mycat.sh start;脚本主要作用是为服务器的回环接口设定虚拟IP,并屏蔽该IP的arp请求和应答。
6 总体测验
6.1 网络架构图
主mycat和mysql1在同一个服务器上,IP为:192.168.10.3
从mycat和mysql2在同一个服务器上,IP为:192.168.10.4
mysql1上创建两个数据库db351353(主),db352354(备),mysql2上创建两个数据库db352354(主),db351353(备);mysql2上db351353是mysql1上db351353的备用库,mysql1上的db352354是mysql2上db352354的备用库。
6.2 客户机测试环境
安装navicat for mysql,创建5个数据连接:
直连mysql1数据库 连接名:mysql1 ip:168.10.3 端口:3306
直连mysql2数据库 连接名:mysql2 ip:168.10.4 端口:3306
直连主mycat 连接名:mycat1 ip:168.10.3 端口:8066
直连从myca2 连接名:mycat2 ip:168.10.4 端口:8066
连接lvs 连接名:keepalived ip:168.10.253 端口:8066
6.3 MYSQL主备同步测试
在mysql1上的db351353 添加数据:
DROP TABLE IF EXISTS `so`;
CREATE TABLE `so` (
`so_nbr` int(8) NOT NULL DEFAULT ‘0’,
`local_net_id` int(8) DEFAULT NULL,
`proc_inst_id` int(8) DEFAULT NULL,
`prod_id` varchar(8) DEFAULT NULL,
PRIMARY KEY (`so_nbr`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `so` VALUES (‘1’, ‘351’, null, null);
在mysql2上的db352354添加数据:
DROP TABLE IF EXISTS `so`;
CREATE TABLE `so` (
`so_nbr` int(8) NOT NULL DEFAULT ‘0’,
`local_net_id` int(8) DEFAULT NULL,
`proc_inst_id` int(8) DEFAULT NULL,
`prod_id` varchar(8) DEFAULT NULL,
PRIMARY KEY (`so_nbr`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `so` VALUES (‘2’, ‘352’, null, null);
在各自的备份库上能查到对应的数据,可参考1.9
6.4 MYSQL主主同步测试
在mysql1上的db351353 添加数据:
DROP TABLE IF EXISTS `so`;
CREATE TABLE `so` (
`so_nbr` int(8) NOT NULL DEFAULT ‘0’,
`local_net_id` int(8) DEFAULT NULL,
`proc_inst_id` int(8) DEFAULT NULL,
`prod_id` varchar(8) DEFAULT NULL,
PRIMARY KEY (`so_nbr`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `so` VALUES (‘1’, ‘351’, null, null);
在mysql2上的db352354添加数据:
DROP TABLE IF EXISTS `so`;
CREATE TABLE `so` (
`so_nbr` int(8) NOT NULL DEFAULT ‘0’,
`local_net_id` int(8) DEFAULT NULL,
`proc_inst_id` int(8) DEFAULT NULL,
`prod_id` varchar(8) DEFAULT NULL,
PRIMARY KEY (`so_nbr`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `so` VALUES (‘2’, ‘352’, null, null);
查询mysql2的db351353,看是否和mysql1的db351353一样。
查询mysql1的db352354,看是否和mysql2的db352354一样。
6.5 MYCAT测试
6.5.1 配置mycat主从策略和分片策略
按so表本地网水平分片,351和353两个地市的放到节点dn1,352和354两个地市的放到节点dn2。
6.5.1.1 schema.xml内容:
红色字体为注释,实际文件里没有,注意dn2节点的主从连接库顺序,按说明应该配在前面的写入数据库为主数据库,后面的写入数据库为从数据库,但dn2节点却正好相反,原因待查。
rule=”sharding-by-intfile”>
writeType=”0″ dbType=”mysql” dbDriver=”native”>
select user()
password=”123″>
–>
password=”123″/>
writeType=”0″ dbType=”mysql” dbDriver=”native”>
select user()
password=”xf4851213″>
–>
password=”123″/>
6.5.1.2 rule.xml内容
红色字体为注释,实际文件里没有。
–
– Licensed under the Apache License, Version 2.0 (the “License”);
– you may not use this file except in compliance with the License.
– You may obtain a copy of the License at
–
– http://www.apache.org/licenses/LICENSE-2.0
–
– Unless required by applicable law or agreed to in writing, software
– distributed under the License is distributed on an “AS IS” BASIS,
– WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
– See the License for the specific language governing permissions and
– limitations under the License.
–>
id
func1
user_id
func1
local_net_id –按本地网分片
hash-int
id
rang-long
id
mod-long
id
murmur
0
2
160
weightMapFile
节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 –>
/etc/mycat/bucketMapPath
用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 –>
partition-hash-int.txt
autopartition-long.txt
3
8
128
6.5.1.3 partition-hash-int内容:
红色字体为注释,实际文件里没有。
351=0 –分配到dn1节点
352=1 –分配到dn2节点
353=0
354=1
6.5.2 测试mycat连接
客户机navicat打开mycat1连接,能看到一个数据库TESTDB,数据库中能查到db351353和db352354两个数据库的所有数据。mycat2连接亦同。
6.5.3 测试mycat读写分离
测试目的:由4.4.1.1可知,dn1连接的主数据库是mysql1的db351353,从数据库是mysql2的db351353,balance值为1,此模式下从数据库也为读数据库。mycat增删改操作应通过mysql1的db351353进行,读操作应通过mysql2的db351353进行。
测试方法:客户机通过navicat的mysql2连接更改db351353的so表记录,这样db351353在mysql1和mysql2上有两份不同的数据,在客户机navicat的mycat1连接上查看so表本地网为351的数据是否与mysql2相同,如相同则测试通过。测试过后要恢复mysql2上db351353的数据,以免影响剩余的测试。
6.5.4 测试mycat数据节点容错
测试目的:由4.4.1.1可知,dn1连接的主数据库是mysql1的db351353,从数据库是mysql2的db351353,如果mysql1服务挂掉,dn1节点的增删改操作应自动切换到mysql2的db351353。
测试方法:在mysql1主机上执行 #service mysql.server stop; 在客户机navicat的mycat1连接上看是否能正常查询so表数据,如果查询正常,修改so表本地网为351的数据,在客户机navicat的mysql2连接上查看db351353的so表数据是否和修改的一样,如果一样则测试通过。
注意:如果mysql1服务重新启动,则mysql1的db351353为从数据库,不会重新变为主数据库。
6.5.5 测试mycat节点容错
测试目的:mycat1和mycat2单个节点宕掉,不影响客户机使用数据库。
测试方法:客户机navicat使用keepalived连接,能正常查询和增删改数据。在mycat1上执行#mycat stop;客户机keepalived连接仍能正常使用。mycat1上执行#mycat console,mycat2上执行#mycat stop,客户机keepalived连接能正常使用。mycat2上执行#mycat console,客户机keepalived连接能正常使用,且数据请求路由和keepalived所配lb_algo策略相同。
你可能感兴趣的:(mysql)
mysql禁用远程登录
igotyback
mysql
去mysql库中的user表里,将host都改成localhost之后刷新权限FLUSHPRIVILEGES;
MYSQL面试系列-04
king01299
面试 mysql 面试
MYSQL面试系列-0417.关于redolog和binlog的刷盘机制、redolog、undolog作用、GTID是做什么的?innodb_flush_log_at_trx_commit及sync_binlog参数意义双117.1innodb_flush_log_at_trx_commit该变量定义了InnoDB在每次事务提交时,如何处理未刷入(flush)的重做日志信息(redolog)。它
关于Mysql 中 Row size too large (> 8126) 错误的解决和理解
秋刀prince
mysql mysql 数据库
提示:啰嗦一嘴,数据库的任何操作和验证前,一定要记得先备份!!!不会有错;文章目录问题发现一、问题导致的可能原因1、页大小2、行格式2.1compact格式2.2Redundant格式2.3Dynamic格式2.4Compressed格式3、BLOB和TEXT列二、解决办法1、修改页大小(不推荐)2、修改行格式3、修改数据类型为BLOB和TEXT列4、其他优化方式(可以参考使用)4.1合理设置数据
MongoDB知识概括
GeorgeLin98
持久层 mongodb
MongoDB知识概括MongoDB相关概念单机部署基本常用命令索引-IndexSpirngDataMongoDB集成副本集分片集群安全认证MongoDB相关概念业务应用场景:传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。解释:“三高”需求:①Highperformance-对数据库高并发读写的需求。②HugeStorage-对海量数
入门MySQL——查询语法练习
K_un
前言:前面几篇文章为大家介绍了DML以及DDL语句的使用方法,本篇文章将主要讲述常用的查询语法。其实MySQL官网给出了多个示例数据库供大家实用查询,下面我们以最常用的员工示例数据库为准,详细介绍各自常用的查询语法。1.员工示例数据库导入官方文档员工示例数据库介绍及下载链接:https://dev.mysql.com/doc/employee/en/employees-installation.h
博客网站制作教程
2401_85194651
java maven
首先就是技术框架:后端:Java+SpringBoot数据库:MySQL前端:Vue.js数据库连接:JPA(JavaPersistenceAPI)1.项目结构blog-app/├──backend/│├──src/main/java/com/example/blogapp/││├──BlogApplication.java││├──config/│││└──DatabaseConfig.java
ubuntu安装wordpress
lissettecarlr
1安装nginx网上安装方式很多,这就就直接用apt-get了apt-getinstallnginx不用启动啥,然后直接在浏览器里面输入IP:80就能看到nginx的主页了。如果修改了一些配置可以使用下列命令重启一下systemctlrestartnginx.service2安装mysql输入安装前也可以更新一下软件源,在安装过程中将会让你输入数据库的密码。sudoapt-getinstallmy
计算机毕业设计PHP仓储综合管理系统(源码+程序+VUE+lw+部署)
java毕设程序源码王哥
php 课程设计 vue.js
该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流项目运行环境配置:phpStudy+Vscode+Mysql5.7+HBuilderX+Navicat11+Vue+Express。项目技术:原生PHP++Vue等等组成,B/S模式+Vscode管理+前后端分离等等。环境需要1.运行环境:最好是小皮phpstudy最新版,我们在这个版本上开发的。其他版本理论上也可以。2.开发
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
努力的菜鸟~
sql 数据库
YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear‘IDENTIFIEDBY‘123456’WITHGRANTOPTION’atline1在mysql5.7之前GRANTALLPRIVILEGESON*.*TO'root'@'%'I
mysql学习教程,从入门到精通,TOP 和MySQL LIMIT 子句(15)
知识分享小能手
大数据 数据库 MySQL mysql 学习 oracle 数据库 开发语言 adb 大数据
1、TOP和MySQLLIMIT子句内容在SQL中,不同的数据库系统对于限制查询结果的数量有不同的实现方式。TOP关键字主要用于SQLServer和Access数据库中,而LIMIT子句则主要用于MySQL、PostgreSQL(通过LIMIT/OFFSET语法)、SQLite等数据库中。下面将分别详细介绍这两个功能的语法、语句以及案例。1.1、TOP子句(SQLServer和Access)1.1
鲲鹏 ARM 架构 麒麟 Lylin v10 安装 Nginx (离线)
焚木灵
arm开发 架构 nginx 服务器
最近做一个银行的项目,银行的服务器是鲲鹏ARM架构的服务器,并且是麒麟v10的系统,这里记录一下在无法访问外网安装Nginx的方法。其他文章:鲲鹏ARM架构麒麟Lylinv10安装Mysql8.3(离线)-CSDN博客鲲鹏ARM架构麒麟Lylinv10安装Node和NVM(离线)-CSDN博客鲲鹏ARM架构麒麟Lylinv10安装Pm2(离线)-CSDN博客鲲鹏ARM架构麒麟Lylinv10安装P
Kubernetes部署MySQL数据持久化
沫殇-MS
Kubernetes MySQL数据库 kubernetes mysql 容器
一、安装配置NFS服务端1、安装nfs-kernel-server:sudoapt-yinstallnfs-kernel-server2、服务端创建共享目录#列出所有可用块设备的信息lsblk#格式化磁盘sudomkfs-text4/dev/sdb#创建一个目录:sudomkdir-p/data/nfs/mysql#更改目录权限:sudochown-Rnobody:nogroup/data/nfs
MySQL事务隔离级别和MVCC
简书徐小耳
MySQL事务隔离级别和MVCC参考:https://mp.weixin.qq.com/s/Jeg8656gGtkPteYWrG5_Nw1.MVCC只对读已提交和可重复的读有效果,而未提交读和串行则无意义。2.每条记录都会有trx_id(事务修改记录的id)和roll_pointer是一个指针指向旧版本的undo日志链表(row_id不是必必要的,如果有主键存在就不需要了)3.版本链的头结点就是记
CentOS7 安装MySQL5.7.44
不要Null了
java centos mysql
1.下载mysql安装包,我放在百度网盘里(下方链接)链接:https://pan.baidu.com/s/1_Mn1XW_1mWdTV4mhnLG66A提取码:s31n2.首先看看以前是否安装过mysqlrpm-qa|grep-imysql如果已经安装过mysql会提示卸载mysqlrpm-emysql-…3.使用FinallShell或者Xftp进行上传放到/usr/local/mysql,没
非关系型数据库
天秤-white
nosql
一、为什么要用Nosql1.单机MySQL的时代。一个基本的网站访问量一般不会太大,单个数据库完全足够。那时候更多使用的静态网页html,服务器根本没有太大压力。这时候网站的瓶颈是什么?-数据量如果太大,一个机器放不下。-数据量太大需要建立数据的索引(B+Tree),一个服务器内存放不下。-访问量读写混合,一个服务器承受不了。2.memcached缓存+MySQL+垂直拆分(读写分离)。网站80%
六、全局锁和表锁:给表加个字段怎么有这么多阻碍
nieniemin
数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。6.1全局锁全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是Flushtableswithreadlock(FTWRL)。当你需要让整个库处于
Kubernetes 自定义控制器开发
IT回忆录
Kubenetes kubernetes
目录前言一、CRD二、创建数据库表(Mysql)二、控制器开发1.使用kubernetes的examplecontroller模板2.在controller.go中新增数据表监听方法3.修改tools工具生成资源对象结构体定义这里记录开发k8s控制器的一般方式,controller开发主要使用k8s提供的client-go库进行。前言Controller监听集群内部资源对象的变化,编辑资源对象(增
【K8s】专题十一:Kubernetes 集群证书过期处理方法
行者Sun1989
Kubernetes kubernetes 云原生 容器
本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发、订阅专栏!专栏订阅入口Linux专栏|Docker专栏|Kubernetes专栏往期精彩文章【Docker】(全网首发)KylinV10下MySQL容器内存占用异常的解决方法【Docker】(全网首发)KylinV10下MySQL容器内存占用异常的解决方法(续)【Docker】MySQL源码构建Docker镜
MySQl篇(SQL - 基本介绍)(持续更新迭代)
wclass-zhengge
mysql sql 数据库
目录一、简介二、SQL方言(分页查询为例)1.简介2.SQL方言大比拼2.1.Oracle2.1.1.使用ROWNUM实现分页查询2.1.2.使用ROW_NUMBER()实现分页查询2.2.MySQL2.3.PostgreSQL三、语法规范四、注释五、MySQL脚本中的标点符号一、简介1、SQL是结构化查询语言(StructureQueryLanguage),专门用来操作/访问关系型数据库的通用语
跟着黑马学mysql(5)
小杜不吃糖
mysql 数据库
17.DQL-聚合函数DQL-聚合函数介绍将一列数据作为一个整体,进行纵向计算。常见聚合函数函数功能count统计数量max最大值min最小值avg平均值sum求和语法SELECT聚合函数(字段列表)FROM表名;注意:所有的null值不参与聚合函数的运算18.DQL-分组查询语法SELECT字段列表FROM表名[WHERE条件]GROUPBY分组字段名[HAVING分组后的过滤条件];where
梧桐数据库(WuTongDB):数据库技术中都有哪些常见的优化器
鲁鲁517
梧桐数据库 梧桐数据库
以下是一些常见的数据库优化器:1.CBO(Cost-BasedOptimizer)应用场景:广泛应用于关系型数据库中,如Oracle、PostgreSQL、MySQL等。工作原理:通过计算不同执行计划的代价(如CPU、I/O等资源消耗),选择最低代价的执行计划。代表数据库:Oracle、PostgreSQL、MySQL。特点:CBO使用统计信息(如表大小、索引分布)来评估查询的代价。2.RBO(R
MySQL日志
沉着冷静2024
MySQL mysql 数据库
MySQL日志文章目录MySQL日志MySQL三大日志binlog的三种格式redolog和binlog的区别和应用场景为什么崩溃恢复不用binlog而用redolog?redolog如何实现持久化redolog还能做什么?redolog的三种刷盘策略两阶段提交什么是?为什么?两阶段提交过程MySQL三大日志1.undologundolog是InnoDB存储引擎层的日志,实现了事务的原子性,主要用
MySQL锁
沉着冷静2024
MySQL mysql 数据库
MySQL锁文章目录MySQL锁MySQL中锁的分类创建索引时会锁表吗线上修改表结构会加什么锁Innodb存储引擎的行级锁有哪些Update语句中,不带where条件,加什么锁?MySQL实现乐观锁MySQL死锁MySQL死锁是怎么发生的?检查死锁如何避免死锁MySQL中锁的分类全局锁:主要用于全库逻辑备份表级锁:表锁、元数据锁、意向锁表锁:通过locktables语句对表进行加锁,它不仅限制其他
Python实现mysql命令行
xu-jssy
python mysql adb
一、源码importosimportpymysqldefsql_shell():password=input("EnterPassword:")#访问密码ifpassword.strip()!="yyds":print("Bye")return#清空控制台输出os.system("cls"ifos.name=="nt"else"clear")try:#连接到MySQL数据库conn=pymysql
mysql case 干货
lack倪酱
这是我舍友@某人提供的是为了做酒店时判断每个楼栋有几间空房子的。房间表与数据楼栋表与数据查询楼栋房间总数查询空房间数当时就在想怎么把后一个单列的数据合并到前面那三列的数据里呢?又是百度,又是谷歌,都是什么“unitall”。。表示我要的不是这个。有点难为我小脑瓜,实在是对数据库不了解,只会日常操作。最后是我舍友想出了解决办法直接贴图好了,如果想要了解case是什么,你可以自行查资料。学习查东西也是
计算机毕设Node.js+Vue校园易购二手交易平台(程序+LW+部署)
Node程序源码强子
vue.js 课程设计 node.js
项目运行环境配置:Node.js最新版+Vscode+Mysql5.7+HBuilderX+Navicat11+Vue。项目技术:Express框架+Node.js+Vue等等组成,B/S模式+Vscode管理+前后端分离等等。环境需要1.运行环境:最好是Nodejs最新版,我们在这个版本上开发的。其他版本理论上也可以。2.开发
MySQL 源码|55 - 语法解析(V2):基础查询语句(query_specification)|V20240915
长行
MySQL源码 mysql 源码 语法解析 查询
目录文档:MySQL源码|源码剖析文档目录源码位置(版本=MySQL8.0.37):sql/sql_yacc.yy前置文档:MySQL源码|68-语法解析(V2):LOCKING子句(锁定读取)|V20240909MySQL源码|39-语法解析(V2):ORDERBY子句|V20240814|V20240912(第2版)MySQL源码|40-语法解析(V2):GROUPBY子句|V20240814
老生常谈:MySQL高可用架构
我有一头小花驴
mysql 架构 数据库
引言“高可用”是互联网一个永恒的话题,先避开MySQL不谈,为了保证各种服务的高可用有几种常用的解决方案。服务冗余:把服务部署多份,当某个节点不可用时,切换到其他节点。服务冗余对于无状态的服务是相对容易的。服务备份:有些服务是无法同时存在多个运行时的,比如说:Nginx的反向代理,一些集群的leader节点。这时可以存在一个备份服务,处于随时待命状态。自动切换:服务冗余之后,当某个节点不可用时,要
mysql 隐秘后门_【技术分享】CVE-2016-5483:利用mysqldump备份可生成后门
Toby Dai
mysql 隐秘后门
预估稿费:100RMB投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿前言mysqldump是用来创建MySQL数据库逻辑备份的一个常用工具。它在默认配置下可以生成一个.sql文件,其中包含创建/删除表和插入数据等。在导入转储文件的时候,攻击者可以通过制造恶意表名来实现任意SQL语句查询和shell命令执行的目的。另一个与之相关的漏洞利用场景可以参考。攻击场景攻击者已经能够访问
处理绿盟科技安全评估的系统漏洞
自我修炼的小石头
数据库 运维 开发工具
如下图一次扫描,中度风险39个,这个是必须要处理的.其中mysql占了36个,一看这个感觉整个人都不好了.但是最后解决的办法也很简单,就是升级.系统版本Redhat7.31.telnet因为要升级openssh,openssl,为了避免意外,首先要开启telnet服务,并把所有相关的包上传到服务器.1.1确认是否安装了telnet和xinetd(默认是没有安装)rpm-qatelnet*rpm-q
解线性方程组
qiuwanchi
package gaodai.matrix;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Sc
在mysql内部存储代码
annan211
性能 mysql 存储过程 触发器
在mysql内部存储代码
在mysql内部存储代码,既有优点也有缺点,而且有人倡导有人反对。
先看优点:
1 她在服务器内部执行,离数据最近,另外在服务器上执行还可以节省带宽和网络延迟。
2 这是一种代码重用。可以方便的统一业务规则,保证某些行为的一致性,所以也可以提供一定的安全性。
3 可以简化代码的维护和版本更新。
4 可以帮助提升安全,比如提供更细
Android使用Asynchronous Http Client完成登录保存cookie的问题
hotsunshine
android
Asynchronous Http Client是android中非常好的异步请求工具
除了异步之外还有很多封装比如json的处理,cookie的处理
引用
Persistent Cookie Storage with PersistentCookieStore
This library also includes a PersistentCookieStore whi
java面试题
Array_06
java 面试
java面试题
第一,谈谈final, finally, finalize的区别。
final-修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能
网站加速
oloz
网站加速
前序:本人菜鸟,此文研究总结来源于互联网上的资料,大牛请勿喷!本人虚心学习,多指教.
1、减小网页体积的大小,尽量采用div+css模式,尽量避免复杂的页面结构,能简约就简约。
2、采用Gzip对网页进行压缩;
GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNⅨ系统的文件压缩。我们在Linux中经常会用到后缀为.gz
正确书写单例模式
随意而生
java 设计模式 单例
单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。
懒汉式,线程不安全
当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样
单例模式
香水浓
java
懒汉 调用getInstance方法时实例化
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if(null == ins
安装Apache问题:系统找不到指定的文件 No installed service named "Apache2"
AdyZhang
apache http server
安装Apache问题:系统找不到指定的文件 No installed service named "Apache2"
每次到这一步都很小心防它的端口冲突问题,结果,特意留出来的80端口就是不能用,烦。
解决方法确保几处:
1、停止IIS启动
2、把端口80改成其它 (譬如90,800,,,什么数字都好)
3、防火墙(关掉试试)
在运行处输入 cmd 回车,转到apa
如何在android 文件选择器中选择多个图片或者视频?
aijuans
android
我的android app有这样的需求,在进行照片和视频上传的时候,需要一次性的从照片/视频库选择多条进行上传
但是android原生态的sdk中,只能一个一个的进行选择和上传。
我想知道是否有其他的android上传库可以解决这个问题,提供一个多选的功能,可以使checkbox之类的,一次选择多个 处理方法
官方的图片选择器(但是不支持所有版本的androi,只支持API Level
mysql中查询生日提醒的日期相关的sql
baalwolf
mysql
SELECT sysid,user_name,birthday,listid,userhead_50,CONCAT(YEAR(CURDATE()),DATE_FORMAT(birthday,'-%m-%d')),CURDATE(), dayofyear( CONCAT(YEAR(CURDATE()),DATE_FORMAT(birthday,'-%m-%d')))-dayofyear(
MongoDB索引文件破坏后导致查询错误的问题
BigBird2012
mongodb
问题描述:
MongoDB在非正常情况下关闭时,可能会导致索引文件破坏,造成数据在更新时没有反映到索引上。
解决方案:
使用脚本,重建MongoDB所有表的索引。
var names = db.getCollectionNames();
for( var i in names ){
var name = names[i];
print(name);
Javascript Promise
bijian1013
JavaScript Promise
Parse JavaScript SDK现在提供了支持大多数异步方法的兼容jquery的Promises模式,那么这意味着什么呢,读完下文你就了解了。
一.认识Promises
“Promises”代表着在javascript程序里下一个伟大的范式,但是理解他们为什么如此伟大不是件简
[Zookeeper学习笔记九]Zookeeper源代码分析之Zookeeper构造过程
bit1129
zookeeper
Zookeeper重载了几个构造函数,其中构造者可以提供参数最多,可定制性最多的构造函数是
public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd, boolea
【Java命令三】jstack
bit1129
jstack
jstack是用于获得当前运行的Java程序所有的线程的运行情况(thread dump),不同于jmap用于获得memory dump
[hadoop@hadoop sbin]$ jstack
Usage:
jstack [-l] <pid>
(to connect to running process)
jstack -F
jboss 5.1启停脚本 动静分离部署
ronin47
以前启动jboss,往各种xml配置文件,现只要运行一句脚本即可。start nohup sh /**/run.sh -c servicename -b ip -g clustername -u broatcast jboss.messaging.ServerPeerID=int -Djboss.service.binding.set=p
UI之如何打磨设计能力?
brotherlamp
UI ui教程 ui自学 ui资料 ui视频
在越来越拥挤的初创企业世界里,视觉设计的重要性往往可以与杀手级用户体验比肩。在许多情况下,尤其对于 Web 初创企业而言,这两者都是不可或缺的。前不久我们在《右脑革命:别学编程了,学艺术吧》中也曾发出过重视设计的呼吁。如何才能提高初创企业的设计能力呢?以下是 9 位创始人的体会。
1.找到自己的方式
如果你是设计师,要想提高技能可以去设计博客和展示好设计的网站如D-lists或
三色旗算法
bylijinnan
java 算法
import java.util.Arrays;
/**
问题:
假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,
您希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,注意您只能在绳
子上进行这个动作,而且一次只能调换两个旗子。
网上的解法大多类似:
在一条绳子上移动,在程式中也就意味只能使用一个阵列,而不使用其它的阵列来
警告:No configuration found for the specified action: \'s
chiangfai
configuration
1.index.jsp页面form标签未指定namespace属性。
<!--index.jsp代码-->
<%@taglib prefix="s" uri="/struts-tags"%>
...
<s:form action="submit" method="post"&g
redis -- hash_max_zipmap_entries设置过大有问题
chenchao051
redis hash
使用redis时为了使用hash追求更高的内存使用率,我们一般都用hash结构,并且有时候会把hash_max_zipmap_entries这个值设置的很大,很多资料也推荐设置到1000,默认设置为了512,但是这里有个坑
#define ZIPMAP_BIGLEN 254
#define ZIPMAP_END 255
/* Return th
select into outfile access deny问题
daizj
mysql txt 导出数据到文件
本文转自:http://hatemysql.com/2010/06/29/select-into-outfile-access-deny%E9%97%AE%E9%A2%98/
为应用建立了rnd的帐号,专门为他们查询线上数据库用的,当然,只有他们上了生产网络以后才能连上数据库,安全方面我们还是很注意的,呵呵。
授权的语句如下:
grant select on armory.* to rn
phpexcel导出excel表简单入门示例
dcj3sjt126com
PHP Excel phpexcel
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
if (PHP_SAPI == 'cli')
die('This example should only be run from a Web Brows
美国电影超短200句
dcj3sjt126com
电影
1. I see. 我明白了。2. I quit! 我不干了!3. Let go! 放手!4. Me too. 我也是。5. My god! 天哪!6. No way! 不行!7. Come on. 来吧(赶快)8. Hold on. 等一等。9. I agree。 我同意。10. Not bad. 还不错。11. Not yet. 还没。12. See you. 再见。13. Shut up!
Java访问远程服务
dyy_gusi
httpclient webservice get post
随着webService的崛起,我们开始中会越来越多的使用到访问远程webService服务。当然对于不同的webService框架一般都有自己的client包供使用,但是如果使用webService框架自己的client包,那么必然需要在自己的代码中引入它的包,如果同时调运了多个不同框架的webService,那么就需要同时引入多个不同的clien
Maven的settings.xml配置
geeksun
settings.xml
settings.xml是Maven的配置文件,下面解释一下其中的配置含义:
settings.xml存在于两个地方:
1.安装的地方:$M2_HOME/conf/settings.xml
2.用户的目录:${user.home}/.m2/settings.xml
前者又被叫做全局配置,后者被称为用户配置。如果两者都存在,它们的内容将被合并,并且用户范围的settings.xml优先。
ubuntu的init与系统服务设置
hongtoushizi
ubuntu
转载自:
http://iysm.net/?p=178 init
Init是位于/sbin/init的一个程序,它是在linux下,在系统启动过程中,初始化所有的设备驱动程序和数据结构等之后,由内核启动的一个用户级程序,并由此init程序进而完成系统的启动过程。
ubuntu与传统的linux略有不同,使用upstart完成系统的启动,但表面上仍维持init程序的形式。
运行
跟我学Nginx+Lua开发目录贴
jinnianshilongnian
nginx lua
使用Nginx+Lua开发近一年的时间,学习和实践了一些Nginx+Lua开发的架构,为了让更多人使用Nginx+Lua架构开发,利用春节期间总结了一份基本的学习教程,希望对大家有用。也欢迎谈探讨学习一些经验。
目录
第一章 安装Nginx+Lua开发环境
第二章 Nginx+Lua开发入门
第三章 Redis/SSDB+Twemproxy安装与使用
第四章 L
php位运算符注意事项
home198979
位运算 PHP &
$a = $b = $c = 0;
$a & $b = 1;
$b | $c = 1
问a,b,c最终为多少?
当看到这题时,我犯了一个低级错误,误 以为位运算符会改变变量的值。所以得出结果是1 1 0
但是位运算符是不会改变变量的值的,例如:
$a=1;$b=2;
$a&$b;
这样a,b的值不会有任何改变
Linux shell数组建立和使用技巧
pda158
linux
1.数组定义 [chengmo@centos5 ~]$ a=(1 2 3 4 5) [chengmo@centos5 ~]$ echo $a 1 一对括号表示是数组,数组元素用“空格”符号分割开。
2.数组读取与赋值 得到长度: [chengmo@centos5 ~]$ echo ${#a[@]} 5 用${#数组名[@或
hotspot源码(JDK7)
ol_beta
java HotSpot jvm
源码结构图,方便理解:
├─agent Serviceab
Oracle基本事务和ForAll执行批量DML练习
vipbooks
oracle sql
基本事务的使用:
从账户一的余额中转100到账户二的余额中去,如果账户二不存在或账户一中的余额不足100则整笔交易回滚
select * from account;
-- 创建一张账户表
create table account(
-- 账户ID
id number(3) not null,
-- 账户名称
nam