Ubuntu 下移动 MySQL 的默认目录

最近配置了一台 Ubuntu 1404 的服务器,装好 MySQL 之后,准备把 MySQL 的数据目录(datadir)移动到其它地方(/srv/mysql),之前在 Debian 下面的话,直接做完下面几步就好了:

# service mysql stop
# cp -rp /var/lb/mysql /srv/mysql
# 在 my.cnf 中修改 datadir = /srv/mysql 
# service mysql start

但,这次在 Ubuntu 下直接启动不成功,抛出 start: Job failed to start,Google 之,发现原来在 Ubuntu 中引入了一个 AppArmor 的安全模组,它可以界定单个程序进入一组文件列表。

所以在 Ubuntu 下还需要做一步操作:

/srv/mysql/ 目录加入到 mysqld 的目录列表中去,编辑 /etc/apparmor.d/usr.sbin.mysqld

# vim /etc/apparmor.d/usr.sbin.mysqld

作以下修改

...
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
+ /srv/mysql/ r,
+ /srv/mysql/** rwk, 
...

重启 apparmor

# /etc/init.d/apparmor restart

然后启动 MySQL 就不会报错了。

# service mysql restart

关于 AppArmor 的官方介绍:https://help.ubuntu.com/14.04/serverguide/apparmor.html

Max OSX Mavericks 搭建 nginx + php-fpm + mysql

虽然 Mac 下自带了 apache + php,得总归还是 nginx 用得顺手,所以打算在 Mac 下安装 nginx + php-fpm + mysql

安装 ningx

为了方便起见我直接从 brew 中安装了 ningx,Homebrew 的安装可以参见 Mac OS 中 Homebrew 的安装与使用

  1. 安装,终端下执行

    brew search nginx
    brew install nginx
  2. 配置

    配置文件在 /usr/local/etc/nginx 目录下面,依自己的喜好配置。

  3. 运行,终端下运行 ningx 即可,若 ningx 的运行端口指定为小于 1024 那么还需要 sudo 权限

  4. 其它

    #重新加载配置|重启|停止|退出
    nginx -s reload|reopen|stop|quit
    #测试配置是否有语法错误
    nginx -t

php-fpm

Mac OSX 10.9的系统自带了PHP、php-fpm,所以也省去了安装php-fpm的麻烦。

配置

cd /private/etc/
sudo cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf

然后依照自己的喜好做完配置,还有一点需要修改的是 error_log 的设置,默认编译的时候 log 所在的路径是不存在的,将它反注释,并手动指定一个路径,比如 /usr/local/var/log/php-fpm.log,所以这行看上去应该是这样的:

error_log = /usr/local/var/log/php-fpm.log

运行

sudo php-fpm

安装 mysql

  1. 安装

    mysql 我也从 brew 中安装了:

    brew install mysql
  2. 配置

    初始化 mysql 数据库

    mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp

    这个时候 root 用户是没有密码的,这里给 mysql 的 root 用户设置密码:

    /usr/local/opt/mysql/bin/mysqladmin -u root password 'PASSWORD'

    进行一个安全设置,终端运行,它全引导我们进行一系列设置

    /usr/local/opt/mysql/bin/mysql_secure_installation

    设置 mysql 的配置文件 my.cnf (默认在 /usr/local/Cellar/mysql/版本号/my.cnf)

    设置开机启动(可选)

    ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
    Then to load mysql now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

    常用命令

    mysql.server start #启动mysql服务
    mysql.server stop #关闭mysql服务

EOF

远程连接MySQL数据库很慢的解决方法

这几天把网站的 WEB 跟 MySQL 分开成两台服务器了,可发现远程连接数据库的时候变得很慢,在 4 秒种以上,然而测试了本地的连接后又是正常的。
其实出现这种情况主要是因为在 MySQL 中加入了地址查询,会在连接建立的时候建行一次 DNS 的反查询,所以在这里会出现耗时久的情况。
所以在这里可以有两种解决方法:

第一种:在 MySQL 所在服务器的 hosts 上加入过程连入的服务器的IP <=> 域名的记录。

192.168.0.11   webserver

第二种:修改 MySQL 的配置,在 [mysqld] 段加入 skip-name-resolve

[mysqld]
...
skip-name-resolve

重启 MySQL 使之生效。

以上两种方法都可以解决变慢的问题,不过我建议还是用第一种方法。因为第二种方法的话就不能在 MySQL 的授权表中使用主机名了而只能用ip格式了。

安全删除 mysql-bin 二进制日志

今天网站突然连不上数据库,上了服务器后发现是 mysql 的二进制日志又把硬盘占满了。

像以前都是直接停 mysql 服务,然后删掉 mysql-bin 的日志。后来有同事说可以用 sql 命令来删除这些日志的。

1、显示日志文件:

mysql> show binary logs;

2、删除bin-log(删除mysql-bin.000020之前的所有二进制日志文件)。

mysql> purge binary logs to 'mysql-bin.000049';