之前一直在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 的中文输入早就想吐嘈了。。