1、代理局域网内的主机上网
# 背景
主机A、B局域网通,A有外网,B无外网,B通过A访问外网
内网 外网
A:192.168.0.1 192.168.0.39
B:192.168.0.2
# 安装iptables服务
yum -y install iptables-services
# 开启ip转发功能
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
# 配置SNAT实现,内网主机访问到外网(A主机配置)
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 192.168.0.39
保存生效
# 添加路由信息(B主机配置)
route add -net 0.0.0.0/0 gw 192.168.0.1
# 测试联网
2、无外网主机端口映射到公网
# 背景
外部通过访问A主机3389端口,可以访问到B主机3306端口
# A主机配置
iptables -t nat -I PREROUTING -p tcp --dport 3389 -j DNAT --to 192.168.0.2:3306
iptables -t nat -I POSTROUTING -p tcp --dport 3389 -j MASQUERADE
# 注意防火墙的对应端口要开放
3、mysql的dblink实现
# 环境 mysql5.7
# 需要安装FEDERATED引擎
DROP TABLE IF EXISTS`report`.`internet_user`;
CREATE TABLE `report`.`internet_user` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`user_type` varchar(10) DEFAULT NULL,
`user_code` varchar(10) DEFAULT NULL,
`username` varchar(30) DEFAULT NULL,
`password` varchar(100) DEFAULT NULL,
`phonenum` varchar(20) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
`realname` varchar(30) DEFAULT NULL,
`activestatus` varchar(10) DEFAULT NULL,
`last_update_pwd` timestamp NULL DEFAULTNULL,
`lock_end_time` timestamp NULL DEFAULT NULL,
`from_channel_code` varchar(100) DEFAULT '1',
`client_code` varchar(9) DEFAULT NULL,
`createtime` date DEFAULT NULL,
`updatetime` date DEFAULT NULL,
`creator` bigint(20) DEFAULT NULL,
`updater` bigint(20) DEFAULT NULL,
`pay_passwd` varchar(100) CHARACTER SET utf8COLLATE utf8_bin DEFAULT NULL,
`LOCK_PAY_PASSWD` timestamp NULL DEFAULTNULL,
PRIMARY KEY (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://herlly:123456@192.168.0.200:3306/well_user/user';
4、查询数据库或表大小
要想知道每个数据库的大小的话,步骤如下:
# 进入information_schema数据库(存放了数据库的信息)
useinformation_schema;
# 查询所有数据库的大小:
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables;
# 查看指定数据库的大小: 比如查看数据库home的大小
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables wheretable_schema='home';
# 查看指定数据库的某个表的大小 比如查看数据库home中 members 表的大小
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables wheretable_schema='home' and table_name='members';
5、修改mysql字符集
# 修改my.cnf
[mysqld]
character-set-server= utf8mb4
collation-server='utf8mb4_unicode_ci'
init_connect='SETNAMES utf8mb4'
character-set-client-handshake=FALSE
[client]
default-character-set= utf8mb4
[mysql]
default-character-set= utf8mb4
# 查看字符集状态
/etc/init.d/mysql restart
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
# 修改库字符集
alter database dev_promdb character set utf8mb4;
# 修改表字段字符集
alter table t_coupon_person modify column wish varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci default null comment '祝福语';
# 修改表字符集
ALTER TABLE t_coupon_perso CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
# jdbc连接数据库字符集
jdbc:mysql://localhost/mydb?characterEncoding=UTF-8 # 去除字符集
6、mysql条件数据备份
mysqldump -u ${USER} -p ${PASSWORD} -h ${HOST} ${DATABASE} ${TABLE} --where="${CONDITION}" |gzip > ${NAME}.sql.gz
7、mysql密码遗忘
# 环境mysql 5.7
# 在my.cnf中添加一行
skip-grant-tables
# 重启数据库,设置密码
systemctl restart mysqld
update mysql.user set password=password("000000") where host="localhost" and user="root";
# 去掉“skip-grant-tables”,重启数据库
systemctl restart mysqld
8、mysql表名大小写问题
# 显示当前区分大小写配置
show variables like 'lower_case_table_names%'
# 开启大小写区分配置(0时为敏感,1时为不敏感)
my.cnf添加如下内容,并重启数据库
lower_case_table_names = 0
# 注意
为了避免大小写引发的问题,一种推荐的命名规则是:在定义数据库、表、列的时候全部采用小写字母加下划线的方式,不使用任何大写字母
在任何系统中可以使用lower_case_tables_name=1。使用该选项的不利之处是当使用SHOW TABLES或SHOW DATABASES时,看不出名字原来是用大写还是小写
请注意在Unix中如果以前lower_case_tables_name = 0将lower_case_tables_name设置为1之前,重启mysqld之前,必须先将旧的数据库名和表名转换为小写
9、php文件上传限制
;This sets the maximum amount of memory in bytes that a script isallowed to allocate
memory_limit = 32M
;The maximum size of an uploaded file.
upload_max_filesize = 8M
;Sets max size of post data allowed. This setting also affectsfile upload. To upload large files, this value must be larger thanupload_max_filesize
post_max_size = 16M
10、Redis批量删除key
#!/bin/bash
#Filename: delete_redis_key.sh
#变量更换为实际使用值即可
HOST="$1"
PORT="$2"
DB="$3"
PASSWORD="$4"
KEY="$5"
for i in `echo "keys ${KEY}" |redis-cli -h ${HOST} -p ${PORT} -a "${PASSWORD}" -n ${DB}`
do
redis-cli -h ${HOST} -p ${PORT} -a "${PASSWORD}" -n ${DB} DEL $i
done