描述
应用的一次迁移,直接把这个mysql文件夹打包拿了过来,好久没操作了,折腾了好久才把整个库运行起来,记录下,以免下次重蹈覆辙
应用场景
mysql备份迁移,mysql更换目录,mysql从一台服务器复制到另一台服务器
操作步骤
1.查看数据库文件在哪个目录存放,执行下面命令会输出你的数据库文件目录
show variables like ‘%datadir%’;
2.停止你的MySQL服务
service mysqld stop 或者 systemctl stop mysqld
3.打包mysql文件夹移动到新位置或新服务器,并解压
4.修改你数据库的配置文件中的 datadir 配置
一般在 /etc/my.cnf,修改 datadir 的值为你数据库移动的文件夹目录,我的目录为/opt/soft/mysql,我的my.cnf目录为/opt/soft/mysql/my.cnf
[mysqld]
port = 3306
socket = /tmp/mysql.3306.sock
basedir=/opt/soft/mysql/
datadir=/opt/soft/mysql/data
5.修改 /etc/init.d/mysqld 文件
basedir=/opt/soft/mysql
datadir=/opt/soft/mysql/data
如果没有这个文件,cp /opt/soft/mysql/support-files/mysql.server /etc/init.d/mysqld
6.启动 service mysqld start
[yyq subsys]$ service mysqld start
Unit mysqld.service could not be found.
Starting MySQL…[ OK ]
[yyq subsys]$
7.如果不发生异常,表示已经成功
这里根据情况确定是否保留数据库,保留直接永久性,不保留就可以把原先的文件删除了
8.创建mysql软链接
ln -s /opt/soft/mysql/bin/mysql /usr/bin
迁移过程遇到的问题
待确认:
6.删除新的数据库文件夹下的2个文件:ib_logfile0 和 ib_logfile0(不删除启动会报错) (这是某文章写得,我这没报错,有报错可以删除)
7.chown -R 新建数据库目录 mysql:mysql (授权 mysql 该数据库目录)(这是赋权,我这里没有创建mysql用户,直接用的当前用户,不影响,如果有,需要赋权)
1.Unit mysqld.service could not be found.
没找到具体解决方案,我这好像不影响,影响再说……
MySQL问题-Unit mysqld.service could not be found.
2.ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
删除/var/lock/subsys/mysql 下的mysql文件即可
参考链接:
ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
3.bash: mysql: command not found
[yyq subsys]$ mysql -uroot -p
bash: mysql: command not found…
[yyq subsys]$ ln -s /opt/soft/mysql/bin/mysql /usr/bin
ln: failed to create symbolic link ‘/usr/bin/mysql’: Permission denied
[yyq subsys]$ exit
exit
[root subsys]# ln -s /opt/soft/mysql/bin/mysql /usr/bin
4.Warning: World-writable config file ‘/etc/my.cnf’ is ignored
原因:权限777,任何一个用户都可以改my.cnf,存在很大的安全隐患.
解决方法:授权644权限 chmod 644 /etc/my.cnf,重启mysql服务
参考链接:
Linux系统MySQL开启远程连接Warning: World-writable config file ‘/etc/my.cnf’ is ignored
5.ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’
[yyq subsys]$ mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
[yyq subsys]$ cd /tmp/
[yyq tmp]$ exit
exit
[root@iaas92824-Computer subsys]# ln -s /tmp/mysql.3306.sock /tmp/mysql.sock这个其实是我的my.cnf配置的socket存在问题 socket=/tmp/mysql.3306.sock
此处我建了个软连接解决的,其实该这里直接改下
6.Starting MySQL. ERROR! The server quit without updating PID file
service mysqld start启动报错
[tmn@ mysql]$ service mysqld start
Starting MySQL. ERROR! The server quit without updating PID file (/home/soft/mysql/data/xxxx.pid).
这个问题在我这里有两个原因,一个是我修改/etc/my.cnf后生效了,另一个是我建了个空数据目录可以了,利旧不行,让把mysql-bin.index删掉或注掉可以了