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