MySQL 两表字段值对比

默认分类 2017-05-21 20:53 暂无评论

场景:查询未充值有兑换记录的用户 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;

MyCat 读写分离

运维的坑 2017-04-10 06:00 暂无评论

实验机两台,分别做主从读写分离。大部分满足一般需求。后期可以扩展到多主多从分库分表去做。

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 源码 CMake 编译部署

运维的坑 2017-03-20 08:57 暂无评论

随手记一下。

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

阅读剩余部分

CentOS 7.x 部署 Supervisor

运维的坑 2017-01-18 02:01 暂无评论

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 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 的设置。

阅读剩余部分