场景:查询未充值有兑换记录的用户 ID
两表 t1 是兑换表, t2 是充值表不考虑其他字段内容,只对比两表的记录并且去重
使用 LEFT JOIN 来实现对比,DISTINCT 去重复,最后返回的结果是 t2 结果为 NULL 的显示。
SELECT DISTINCT
t1.user_number,
t2.user_number
FROM
(
SELECT DISTINCT
t1.user_number
FROM
t_card_list t1
) t1
LEFT JOIN (
SELECT DISTINCT
t2.user_number
FROM
t_recharge_log t2
WHERE
t2.type = 10
) t2 ON t1.user_number = t2.user_number
WHERE
t2.user_number IS NULL;
实验机两台,分别做主从读写分离。大部分满足一般需求。后期可以扩展到多主多从分库分表去做。
Master IP: 192.168.1.101
Slave IP : 192.168.1.102
这里设置两台 MySQL 服务器提供 Master/Slave 服务。MySQL 版本均为社区版 5.7.11 保持 MySQL 版本一致。
下载 JDK 以及 MyCat 解压并且配置环境变量。
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
http://dl.mycat.io/1.6-RELEASE/
环境变量:
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin
修改 MySQL 的配置文件 /etc/my.cnf
在 [mysqld]
节点下添加及修改 server-id
随手记一下。
MySQL 源码编译选项参考 MySQL 官方文档:https://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html
1. 首先安装一下需要的依赖
yum install -y vim wget cmake gcc gcc-c++ ncurses-devel bison zlib libxml openssl perl perl-Data-Dumper
2. 把源码包下载下来
wget -c https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.35.tar.gz && tar zxf mysql-5.6.35.tar.gz && cd mysql-5.6.35
3. 创建用户及组
groupadd mysql && useradd mysql -g mysql -M -s /sbin/nologin
4. 编译安装
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNODB_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_LOCAL_INIFILE=1 \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1
编译安装
make && make install
easy_install supervisor
or pip install supervisor
安装完成 Supervisor 后,初始化配置文件 echo_supervisord_conf > /etc/supervisord.conf
创建 Supervisord 守护进程配置文件目录 mkdir /etc/supervisord
并且编辑 /etc/supervisord.conf
文件 [include]
节点下的文件包含配置,去掉注释以后修改结果
[include]
;files = relative/directory/*.ini
files = /etc/supervisord/*.conf
将 Supervisor 加入开机自启动,使用 systemctl 管理,到 Supervisor 官方 GitHub 项目取配置文件 https://github.com/Supervisor/initscripts
CentOS 7.x 使用 centos-systemd-etcs
即可。
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
的设置。