ubuntu下进行MySQL的移植

最近一直很忙,忙着加班进行服务器升级。

服务器全部升到了Ubuntu 1004 LTS,但是在进行mysql移植的时候碰到了个大问题,直接到原来的数据文件同步过来,mysql却无论如果也启动不了。

最后那边的老大告诉我说,是AppArmor的问题,让哥关掉这个什么AppArmor,果然,数据库就起来了。
简单查了一个,这个AppArmor应该是跟SELinux差不多的东西,但级别好像并没有SELinux那么高,直接停用服务就没用了。相关资料:https://wiki.ubuntu.com/AppArmor

另外还有两个问题:

1, socket文件的如果不能写入,数据库也是起不来的,所以,还要关注一下你指定的socket文件的位置的权限
2, 从5.0升级到5.1有很多麻烦,建议最好是做逻辑备份而不是做直接物理升级

好像直接升级也有问题,等待进一步的更新。

MySQL提示“too many connections”的解决办法

今天生产服务器上的MySQL出现了一个不算太陌生的错误“Too many connections”。平常碰到这个问题,我基本上是修改/etc/my.cnf的max_connections参数,然后重启数据库。但
是生产服务器上数据库又不能随便重启。

没办法,只好想办法手动去释放一些没用的连接。
登陆到MySQL的提示符下,数据show processlist这个命令,可以得到所以连接到这个服务器上的MySQL连接:

mysql> show  processlist;
+---------+------+---------------------+---------+---------+------+-------+-------------------+
| Id      | User | Host                | db      | Command | Time | State | Info              |
+---------+------+---------------------+---------+---------+------+-------+-------------------+
| 1180421 | ur   | 202.103.96.68:49754 | test1   | Sleep   |    1 |       | NULL              |
| 1180427 | ur   | 202.103.96.68:55079 | test2   | Sleep   |    1 |       | NULL              |
| 1180429 | ur   | 202.103.96.68:55187 | testdba | Sleep   |    0 |       | NULL              |
| 1180431 | ur   | 202.103.96.68:55704 | testdba | Sleep   |    0 |       | NULL              |
| 1180437 | ur   | 202.103.96.68:32825 | test1   | Sleep   |    1 |       | NULL              |
| 1180469 | ur   | 202.103.96.68:58073 | testdba | Sleep   |    0 |       | NULL              |
| 1180472 | ur   | 83.136.93.131:47613 | test2   | Sleep   |    8 |       | NULL              |
| 1180475 | root | localhost           | NULL    | Query   |    0 | NULL  | show  PROCESSLIST |
+---------+------+---------------------+---------+---------+------+-------+-------------------+
8 rows in set (0.00 sec)

mysql>

然后,你可以看到像上面这样的MySQL数据连接列表,而且每一个都会有一个进程ID号(在上表的第一列)。我们只要输入这样的命令:

mysql> kill 1180421;
Query OK, 0 rows affected (0.00 sec)

mysql>

其中1180421为你在进程列表里找到并且要杀掉的进程号。

mysqld_multi—-管理多实例数据库

mysqld_multi是用来管理在同一台机器上监听着不同的端口和不同的socket连接的多个mysqld进程。它可以用来启动或者停止这些服务,也可以报告他们当前的状态。

要使用这个服务,我们首先得建立一个多实例对象的配置文件,格式如下:

[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = root
[mysqld1]
socket = /tmp/mysql.sock1
port = 3307
pid-file = /var/lib/mysql1/hostname.pid1
datadir = /var/lib/mysql1
log = /var/lib/mysql1/log-file.log
log-error = /var/lib/mysql1/log-error.err
[mysqld2]
socket = /tmp/mysql.sock2
port = 3308
pid-file = /var/lib/mysql2/hostname.pid2
datadir = /var/lib/mysql2
log = /var/lib/mysql2/log-file.log
log-error = /var/lib/mysql2/log-error.err

跟普通的配置文件相比,这里首先多了一个[mysqld_multi]的配置
这个里面要配置的参数一般就是四个参数
mysqld与mysqladmin,填写你的mysqld_safe与mysqladmin的全路径就可以了。
user与password,管理帐号的用户名写密码,也就是说你需要在所有的实例中设置一个相同的用户名(密码也要相同)。

然后就是[mysqldN],N可以是任意整数,但是不能重复,代表的是实例ID(官方叫GNR)
这里面的参数就跟普通配置文件[mysqld]一样了。
我不多说了。

启动与停止指定的实例

mysqld_multi --config-file=/etc/my_multi.cnf start 1,2
mysqld_multi stop 1,2

这里的1,2就是我们前面写的N(GNR)
一般在启动的时候,我们需要指定配置文件,停止的时候不要

报告实例的状态:

mysql_multi report 1,2