您的位置:首页 > 数据库 > MySQL

Ubuntu16.04 配置mysql并修改存储路径的艰难之旅

2017-04-23 00:16 429 查看
之前一直在windows上用mysql,现在在ubuntu16 上用mysql,并安装了workbench。

1)安装过程

安装过程比较简单,

sudo apt-get update
sudo apt-get install mysql-server mysql-client


即可安装好mysql,不用去镜像下载再一步步手动安装,那对安装顺序要求比较高,而且用命令安装下载速度飞快,习惯了用命令安装以后已经尽量不考虑手动安装了。

然后安装workbench

sudo apt-get mysql-workbench


比起手动安装来方便不少。

如果安装提示错误是正常的,不要着急,则进行这一步:

sudo apt-get -f install
sudo apt-get mysql-workbench


2)发现问题

安装完成后,mysql workbench 已经可以开始工作了,但我现在有两个问题:

1– workbench 操作配置文件的界面显示不可用,也不可以使用打开/关闭服务的按键

2 –默认路径为/var/lib/mysql, 而我的系统给它的分区较小,数据量很大,需要改存储路径

自此,我走上了8个小时的修行之旅,并找到了完美的解决方案,特此记录。

3)对于问题1,是因为workbench没有配置好配置文件的位置,这里需要理解的是,workbench 操作配置文件的界面只是一个对配置文件的操作工具,方便我们改某配置文件而已,你给了它一个文件路径,它就仅是会修改文件而不是将指定的文件配置给mysql——如果你指定的文件不是mysql正在使用的配置文件,那么怎么操作也没有意义。

首先,点击INSTANCE标签右边的扳手符号进入Manage Server Connections 配置界面后,System Profile中,System Type选Linux,Installation Type 是Custom;

Configuration File 要选择对mysql的配置有具体内容的文件,这一点很重要,一般的教程会告诉你,windows下配置文件是my.ini,在C盘隐藏的ProgramData文件夹的mysql相关文件夹里,而ubuntu的是my.cnf,在/etc下或者在/etc/mysql下,不错,my.cnf 的确是mysql的配置文件,但打开后,它的内容是:

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/


继续浏览整个文件夹与子文件夹的所有内容,会发现,只有/etc/mysql/mysql.conf.d/mysqld.cnf 里面有真正的配置内容,需要将它放到Configuration File的路径信息上面板才会出现具体的配置信息。

然后在Configuration File Section 填 mysqld。

开关mysql命令分别填写:

/etc/init.d/mysql start  /etc/init.d/mysql stop


修改完我以为第1个问题解决了,测试一下:

show variables like '%datadir%';
show variables like 'character%';


分别显示存储路径与字符集信息,在配置面板修改这些信息,然而重复执行这两条命令,没有丝毫改变,也就是,对配置文件的修改,是没有起到效果的,起码对存储路径与字符集信息的修改没用。

后来不停尝试,强行stop service无果,就打算关机重来。。可是系统开不了机了。。我在系统崩溃后崩溃了一会儿,和妈妈打了一个电话,心情稍微平复后,抱着重装系统的心情重新开张(之前我的深度学习平台与各种软件的配置也是有时间成本的啊!)。我是双系统电脑,选择Ubuntu后就一直黑屏有一个光标在左上角闪了一个小时都不进入系统,问题我猜测可能是引导启动出了问题,当初使用EasyBCD做的双系统引导选择,所以在Windouws上重新设置了一下Ubuntu的启动设置,问题就解决了——幸亏发现了这个方法,不然我又要搭进两天时间配各种环境与软件了。

闲话不说了,方法继续:

因为权限问题,各种想查看的文件十分麻烦,用
sudo nautilus
就可以在图形界面自由打开和修改文件夹与文件了,被逼到一定程度可以这么做,但是在修改任何文件之前最好先备份,不小心改了哪里就真的跪了。

重新开机后,首先,需要将存储文件夹
/var/lib/mysql/
原封不动复制到我的新存储位置上去
/home/baiyu/Project/mysql/


尝试:
service mysql start

Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.


这时我搜索到了修改配置文件不起作用的原因——Apparmor

得到最关键的一步

apparmor控制了应用的目录访问权限,所以mysql是绕不开它的。
修改“/etc/apparmor.d/usr.sbin.mysqld”文件。
将其中默认的data目录是:

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

把这两行修改为移动过的的实际的数据文件目录,例如:

/home/baiyu/Project/mysql/ r,
/home/baiyu/Project/mysql/** rwk,

保存,执行 service apparmor restart 重启apparmor服务。


然而,还是有:

baiyu@baiyu-ubuntu:~$  service apparmor restart
baiyu@baiyu-ubuntu:~$ service mysql start
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.


因此,开始了早就该开始的——查看log

mysql的错误日志在
/var/log/mysql
下,上面的时间是英国时间,与我现在时差8小时,差点让我以为找错地方了,开始debug:

[Note] InnoDB: Using CPU crc32 instructions
mysqld: Can't create/write to file '/home/baiyu/Project/mysql/temp/ibY3R47W' (Errcode: 2 - No such file or directory)


这是因为在我修改配置文件时,加了一句
tmpdir = /home/baiyu/Project/mysql/temp
,先注释掉。从这里可以看出,配置文件的修改起到了作用,多亏了修改apparmor的那一步

然后出现了新的错误:

[ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable


原来是我复制到新路径的文件权限问题,

修改权限:

ls -l
-rw-r----- 1 root root       56 4月  22 00:28 auto.cnf
-rw-r--r-- 1 root root        0 4月  22 00:28 debian-5.7.flag
-rw-r----- 1 root root      320 4月  22 19:44 ib_buffer_pool
-rw-r----- 1 root root 12582912 4月  23  2017 ibdata1
-rw-r----- 1 root root 50331648 4月  23  2017 ib_logfile0
-rw-r----- 1 root root 50331648 4月  22 00:28 ib_logfile1
-rw-r----- 1 root root 12582912 4月  23  2017 ibtmp1
drwxrwxrwx 2 root root     4096 4月  22 00:28 mysql
d-wx--xr-- 2 root root     4096 4月  22 17:59 mytest
drwxr-x--- 2 root root     4096 4月  22 00:28 performance_schema
drwxr-x--- 2 root root    12288 4月  22 00:28 sys
drwxr-x--- 2 root root     4096 4月  22 19:10 test

sudo chmod 666 ibdata1


又出现了类似的问题,原来全都没有权限!

这样太不科学,最好不要随便修改原来文件的属性,与原文件夹的内容对比一下,发现是文件从属用户与用户组变了,可能因为直接用root权限复制过来,新建的文件夹归属root,而原来是归属mysql的,所以会出现mysql对文件操作时会没有权限报错,那么将其改回去即可:

baiyu@baiyu-ubuntu:~/Project/mysql$ sudo chown -R mysql.mysql mysql
baiyu@baiyu-ubuntu:~/Project/mysql$ ls -l
总用量 122916
-rw-r----- 1 root  root        56 4月  22 00:28 auto.cnf
-rw-r--r-- 1 root  root         0 4月  22 00:28 debian-5.7.flag
-rw-r----- 1 mysql mysql      255 4月  22 22:45 ib_buffer_pool
-rw-rw-rw- 1 root  root  12582912 4月  22 22:45 ibdata1
-rw-rw-rw- 1 root  root  50331648 4月  22 22:45 ib_logfile0
-rw-rw-rw- 1 root  root  50331648 4月  22 00:28 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 4月  22 22:45 ibtmp1
drwxrwxrwx 2 mysql mysql     4096 4月  22 00:28 mysql
d-wx--xr-- 2 root  root      4096 4月  22 17:59 mytest
drwxr-x--- 2 root  root      4096 4月  22 00:28 performance_schema
drwxr-x--- 2 root  root     12288 4月  22 00:28 sys
drwxr-x--- 2 root  root      4096 4月  22 19:10 test
baiyu@baiyu-ubuntu:~/Project/mysql$ sudo chown -R mysql.mysql sys
baiyu@baiyu-ubuntu:~/Project/mysql$ sudo chown -R mysql.mysql test
baiyu@baiyu-ubuntu:~/Project/mysql$ sudo chown -R mysql.mysql performance_schemabaiyu@baiyu-ubuntu:~/Project/mysql$ sudo chown -R mysql.mysql mytest
baiyu@baiyu-ubuntu:~/Project/mysql$ sudo chown  mysql.mysql auto.cnf
baiyu@baiyu-ubuntu:~/Project/mysql$ sudo chown  mysql.mysql ib_buffer_pool
baiyu@baiyu-ubuntu:~/Project/mysql$ sudo chown  mysql.mysql ibdata1
baiyu@baiyu-ubuntu:~/Project/mysql$ sudo chown  mysql.mysql ib_logfile0
baiyu@baiyu-ubuntu:~/Project/mysql$ sudo chown  mysql.mysql ib_logfile1
baiyu@baiyu-ubuntu:~/Project/mysql$ sudo chown  mysql.mysql ibtmp1
baiyu@baiyu-ubuntu:~/Project/mysql$ ls -l
总用量 122916
-rw-r----- 1 mysql mysql       56 4月  22 00:28 auto.cnf
-rw-r--r-- 1 root  root         0 4月  22 00:28 debian-5.7.flag
-rw-r----- 1 mysql mysql      255 4月  22 22:46 ib_buffer_pool
-rw-rw-rw- 1 mysql mysql 12582912 4月  22 22:47 ibdata1
-rw-rw-rw- 1 mysql mysql 50331648 4月  22 22:47 ib_logfile0
-rw-rw-rw- 1 mysql mysql 50331648 4月  22 00:28 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 4月  22 22:47 ibtmp1
drwxrwxrwx 2 mysql mysql     4096 4月  22 00:28 mysql
d-wx--xr-- 2 mysql mysql     4096 4月  22 17:59 mytest
drwxr-x--- 2 mysql mysql     4096 4月  22 00:28 performance_schema
drwxr-x--- 2 mysql mysql    12288 4月  22 00:28 sys
drwxr-x--- 2 mysql mysql     4096 4月  22 19:10 test


这时,新的存储路径里的内容与原来的内容完全相同了,包括文件属性。

此时,mysql可以成功打开了,而且配置文件也可以使用,存储路径也已经改变,问题都解决了,一切变成了生机勃勃的样子。

最后一些记录tips:

多亏了这篇文章的提醒,我才想起查看日志来解决问题

启动
start mysql 或者 service mysql start 或者 /etc/init.d/mysql start


停止
stop mysql 或者 service mysql stop 或者 /etc/init.d/mysql stop


重启
restart mysql 或者 service mysql restart 或者 /etc/init.d/mysql restart


设置禁止mysql开机自启动(apt-get安装的mysql默认是开机自启动的)
sudo update-rc.d mysql disable


发现的好的资料MySQL配置文件my.cnf参数优化和中文详解

PS: Ubuntu 的中文输入早就想吐嘈了。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息