MySQL sql_mode 可能遇到的坑

运维的坑 2017-01-17 21:37 暂无评论

MySQL 插入数据时报错 Incorrect integer value: '' for column 'id' at row 1 [closed] 插入值为 '' 空,MySQL 5.6.x 不进行数据转换,在 5.5.x 以及 5.7.x 通过,唯独 5.6.x 报错导致业务不正常。

检查发现是有关 sql_mode 的原因。

mysql> SELECT @@GLOBAL.sql_mode;
+--------------------------------------------+
| @@GLOBAL.sql_mode                          |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
1 row in set

只要把 sql_mode 设置为空即可,或者注释。

默认 MySQL 启动时是按照以下顺序加载的 my.cnf

[root@Master-PHP ~]# mysql --help | grep 'cnf'
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf

没有指定配置文件则是按照顺序查找到配置文件启动,但是 /etc/mysql/my.cnf 以及 ~/.my.cnf 这两个文件是不存在的,也就是说只会加载 /etc/my.cnf 但是在该配置文件内并未找到有关 sql_mode 的设置。

阅读剩余部分

Linux 编译部署 PHP 7.x 版本 Memcache 扩展及 Memcached 服务

默认分类 2017-01-12 23:15 暂无评论
系统版本:CentOS 7.2
Memcached 版本:1.4.34
PHP 版本:7.x

PHP 安装编译过程这里就不讲述了。关于 Memcached 和 PHP 的安装顺序无所谓,两者不关联也没有特定依赖。

1. 安装 Memcached

官方下载地址:http://memcached.org/files/memcached-1.4.34.tar.gz

mkdir /usr/local/memcached
wget -c http://memcached.org/files/memcached-1.4.34.tar.gz
tar zxf memcached-1.4.34.tar.gz && cd memcached-1.x.x
./configure --prefix=/usr/local/memcached
make && make test && make install

将 Memcached 安装至 /usr/local/memcached 目录下,随后添加开机启动。

阅读剩余部分

NTP 反射型放大 DDoS 攻击安全应急响应

安全加固 2017-01-11 06:44 暂无评论

今天突然来 30 Gbps 的流量把我打懵逼了,恰巧遇到我这里停电,想外出找个地方上网,发现在下冰雹。艹

阿里云免费提供的 5 GB 流量防护,其实达到一半的时候就丢进黑洞等清洗了。

等到电力恢复,服务器已经清洗完毕了。为了预防业务系统无法为用户服务,在部署架构中做了多层中转,源出口服务器一域名因 CDN 回源直接打到源出口导致其余中转服务器均无法继续服务。

取阿里云提供的抓包数据,检查发现是 NTP 攻击,流量在 5 秒间流量打到 27.9 Gb 检查了一遍中转服务器发现 ntpdate 服务开启并且存在反射型漏洞,该服务器仅提供了 Web 服务,时间需同步处理。如果没有必要,把关于 NTP 的服务关闭或限制入口流量,避免肉鸡。

如果遇到 DDoS 上硬防~ DDoS 大流量无解,除了烧钱我没话说~

处理方法,丢弃该出口服务器,另外部署一台出口节点服务器,再部署一台高防线路服务器做下层出口节点,域名均上 CDN 保持源不泄露,对出口源进行白名单过滤,开放 TCP 80 端口过滤无用端口。

如果舍得,部署中心服务器,各地机房自行部署出口节点以及购买 CDN 服务。DNS 解析对地区性解析,挂完 CDN 我再切节点。在 CDN 挂前足够有时间立即响应安全事件了,当然在与 DDoS 进行对抗,完全就是一场烧钱的活动 =.=

MySQLdb 插入数据没有成功

Python 2016-11-06 03:37 暂无评论

找了一下有关 MySQLdb 模块的文档,有的是在执行完 SQL 语句之后,还要执行一个 commit() 到我这里,没有!!!!

然后就坑爹了。。连 close() 都没有!!!

找了一下资料,发现这个可以用……

connt = MySQLdb.connect("127.0.0.1", "root", "root", "wiki", charset="utf8")
db = connt.cursor()
db.execute("""INSERT INTO a(a) VALUE ('a');COMMIT;""")

就可以正常插入数据,如果是值有转义 SQL 语句中改一下就可以了。

db.execute("""INSERT INTO a(a) VALUE (%s);COMMIT;""", ('aaa'))

MySQLdb 会自动转移字符串

SSH 使用证书登录,禁止使用密码登录

安全加固 2016-11-04 08:47 暂无评论

首先到这里下载 puttygen.exe 然后创建密钥。
1.jpg

然后我们将保存的公钥写入到 ~/.ssh/authorized_keys 注意,直接复制 puttygen.exe 生成的 key 粘贴到 authorized_keys,否则会出现换行等错误。导致公钥导入错误使用证书登录的时候失败。(生成的时候鼠标一直移动,生成速度会更快哦~)

然后修改 /etc/ssh/sshd_config

StrictModes no
RSAAuthentication yes
PubkeyAuthentication yes
ChallengeResponseAuthentication no
PasswordAuthentication no
AuthorizedKeysFile      .ssh/authorized_keys

阅读剩余部分