Intelligence without ambition is a bird without wings.

2015-06-11
samba-常见问题

诊断流程

  1. 首先确定samba服务是否运行,smb和nmb两个进程。

  2. 看一下服务器samba配置文件/etc/samba/smb.conf的workgroup,它必须与Win的工作组一致,一般Win的工作组是WORKGROUP。

  3. 看配置文件里的interfaces是否正确,hosts allow的ip段是否覆盖Win的ip地址。

  4. 服务器上启用user安全级别时,是否添加了共享用户,是否允许共享用户浏览。

  5. 防火墙的规则设置是否正确。

  6. SELinux是否阻止你访问samba共享的目录。

阅读此文

2015-06-11
sql-连接

作用

  • SQL通过连接将多个表关联起来,是实现数据组合最重要的一环!

  • 所以连接的本质是通过一些生成手段来获取目标集合,再通过对连接生成的集合(临时表)加以筛选,得到目标数据

连接方式

内连接(INNER JOIN)

只返回两个表中连接条件成立的行

外连接(OUTER JOIN)

外连接并不要求连接的两表的每一条记录在对方表中都一条匹配的记录.

全外连接(FULL OUTER JOIN)

保留2边都不匹配的数据

左连接(LEFT OUTER JOIN, sql中简写LEFT JOIN)

保留左边不匹配的数据

右外连接(RIGHT OUTER JOIN)

保留右边不匹配的数据

交叉连接(CROSS JOIN)

示例:

1
SELECT a.*, b.* FROM A, B WHERE A.id = b.id

执行过程:

  1. 将A与B做笛卡尔积运算,得到临时表C

  2. 再通过过滤条件A.id = b.id,得到结果集

自连接(SELF JOIN)

一种交叉连接的特例,和自身交叉

参考

  1. widi-连接)
  2. http://www.mysqltutorial.org/mysql-update-join/
阅读此文

2015-06-10
wget

  • 使用账号,密码

    wget --user admin --password monit http://localhost:2812
    
阅读此文

2015-06-10
centos-安装mysql

环境

  • centos-7.0.1-64-server

  • 5.5.41-MariaDB MariaDB Server

步骤

  1. 安装

    yum -y install mariadb-server mariadb
    
  2. 启动

    systemctl start mariadb
    systemctl enable mariadb
    
  3. 配置向导

    mysql_secure_installation
    
阅读此文

2015-06-10
mysql-主从数据库配置

环境

  • ubuntu-14.04

  • mysql-5.5

步骤

  • 修改主数据库配置

    vi /etc/my.cnf.d/server.cnf
    
    [mysqld]
    server-id=1
    binlog-do-db=<database-name>
    relay-log=/var/lib/mysql/mysql-relay-bin
    relay-log-index=/var/lib/mysql/mysql-relay-bin.index
    log-error=/var/lib/mysql/mysql.err
    master-info-file=/var/lib/mysql/mysql-master.info
    relay-log-info-file=/var/lib/mysql/mysql-relay-log.info
    log-bin=/var/lib/mysql/mysql-bin
    
  • 重启mysql

    systemctl restart mariadb
    
  • 给从库复制权限

    grant replication slave on *.* to 'slave'@'%' identified by 'slave';
    
  • 锁表,以便备份

    FLUSH TABLES WITH READ LOCK;
    
  • 记录下当前主库日志状态,以便从库同步

    SHOW MASTER STATUS;
    
  • 导出要同步的数据库

    mysqldump -uroot -p --master-data <database-name>;
    
  • 解锁表

    UNLOCK TABLES;
    

从服务器配置

  • 修改配置

    vi /etc/my.cnf.d/server.cnf
    
    [mysqld]
    server-id=2
    replicate-do-db=test2
    relay-log=/var/lib/mysql/mysql-relay-bin
    relay-log-index=/var/lib/mysql/mysql-relay-bin.index
    log-error=/var/lib/mysql/mysql.err
    master-info-file=/var/lib/mysql/mysql-master.info
    relay-log-info-file=/var/lib/mysql/mysql-relay-log.info
    log-bin=/var/lib/mysql/mysql-bin
    
  • 修改权限控制

    vi /etc/apparmor.d/usr.sbin.mysqld
    
  • 连接master

    mysql -uroot -p
    stop slave;
    CHANGE MASTER TO MASTER_HOST='172.18.1.192', MASTER_USER='slave', MASTER_PASSWORD='slave', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=822;
    start slave;
    show slave status\G
    

常见错误

  • mysql Last_IO_Errno: 1045

    账号密码认证方面错误。

    可以现在master上尝试登陆,看是否成功。

其他常用命令

  • 重新设置slave

    RESET SLAVE;
    
  • 查看进程状态

    SHOW PROCESSLIST \G;
    

参考

  1. https://dev.mysql.com/doc/refman/5.1/en/replication-howto.html
  2. https://lesca.me/archives/mysql-master-slave-replication-on-centos-7.html
阅读此文

2015-06-09
输出重定向

  • 追加模式,标准输出和标准出错

    >> filename 2>&1
    
  • 标准输出,和出错全丢弃

    >/dev/null 2>&1
    
阅读此文

2015-06-09
cron配置

环境

  • ubuntu-14-10-64-server

配置文件

  • 用户配置文件

    /var/spool/cron/root
    
  • 系统全局配置

    /etc/crontab
    /etc/cron.*
    

配置通过SMTP发送邮件

  • 先卸载postfix

    apt-get purge postfix
    apt-get purge mailutils
    apt-get auto-remove
    
  • 安装msmtp

    apt-get install msmtp
    apt-get install msmtp-mta
    
  • 编辑配置文件

    defaults
    logfile /var/log/msmtp.log
    syslog on
    aliases /etc/aliases
    
    account default
    host smtp.exmail.qq.com
    from qiancl@gupiaoxianji.com
    user qiancl@gupiaoxianji.com
    password ******
    auth on
    tls on
    tls_certcheck off
    
  • 测试是否成功

    echo -e "Subject: Test Mail\r\n\r\nThis is a test mail" |msmtp --debug -t qiancl@gupiaoxianji.com
    
  • 让cron使用smtp发送

    crontab -e
    
    MAILTO=qiancl@gupiaoxianji.com
    

调试

  • 每分钟执行,查看执行是否成功

    * * * * * CMD
    
阅读此文

2015-06-08
mysql使用memcached缓存

  • 授权memcached访问权限

    grant select on stock_app.* to memcache@"%" identified by "12345";
    
阅读此文

2015-06-08
C++编程经验

  1. 注释采用//风格

    • 多行注释时,方便取消局部行
    • 方便diff
    • grep等替换时,方便确认是否需要注释
  2. 变量声明,尽量一次一个

    • 方便diff
    • 方便注释
  3. 函数参数大于3个时,逗号号换行

    • 方便diff
    • 方便调整参数(增,减,顺序)
  4. 类初始化列表,一行一个

    • 方便diff
  5. 禁用strcpy类似不带指定缓冲区大小的,使用strncpy这类!

    • 清楚地知道操作内存范围,防止越界!!!
阅读此文

2015-06-08
C++-构造函数

职责

  • 对所有的类成员变量进行初始化, 让对象构造后处于一个可用的状态(Good State)

要点

  • 若在构造函数中抛出异常,则析构函数不被执行,因为该对象没有完全构建,会导致delete无效指针

  • 构造函数抛出异常时,本应该在析构函数中被delete的对象没有被delete,会导致内存泄露

按功能分类

默认构造函数

1
2
T(); // 没有参数
T(int i=0); // 参数有默认值

无需参数的构造函数,提供一种无需参数就可初始化的能力

转换构造函数

1
T(...)

除默认构造函数外,没有explicit修饰的构造函数

提供其他数据类型向该类型隐式转换(implicit conversion)的能力

此类构造函数,在复制初始化(copy initialization)中会被编译器考虑选用

复制构造函数

1
2
3
T(const T &t);
T(T t);
T(T t, int i=0)

从一个本类型值构造出新对象,提供pass by value能力

移动构造函数

1
T([const|volatile]T &&t);

从一个本类型值快速构造出新对象,提供了move语义

显式构造函数

1
explicit T(...)

除默认构造函数外,explicit修饰的构造函数

提供其他数据类型向该类型显式转换(explicit conversion)的能力

此类构造数据,在直接初始化(direct initialization)显式转换(static_cast等)中会被编译器考虑选用,复制初始化不能使用此类函数

参考

  1. http://en.cppreference.com/w/cpp/language/converting_constructor
  2. http://en.cppreference.com/w/cpp/language/move_constructor
阅读此文