Linux下整體遷移MySQL數據庫文件目錄

字號+ 編輯: 种花家 修訂: H波 來源: CSDN博客 2023-09-11 我要說兩句(0)

那時候還年輕,沒想到數據庫還要往數據磐裡面塞,隨便塞進系統磐裡了事,沒想到今天需要解決這個問題了。搜了搜,網上確實有一些相關聯的話題, 但是忽略了一些細節, 這篇文章站長認爲最棒, 並整理了一些細節推薦給大家。

注:rpm安装mysql,默认的mysql的主目录是【/var/lib/mysql/】,也就是mysql主要的数据文件的存放目录 
现在需要把这些文件放到数据盘。假设数据盘挂载到了/data里, 数据都在/data/mysql, 那么,迁移步骤如下:

1:迁移工作

1.1:停止mysql服务

service mysql stop

1.2:复制数据库到数据盘

我的数据盘目录是/data

>cd /data 
>mkdir mysql 
>cd mysql 
>cp -r /var/lib/mysql/* ./

1.3:把新建的目录改为mysql的用户组

不是表面上看到所有者是mysql就可以略过这一步的, 这一步无论如何都必须要执行!

chown -R mysql:mysql /data/mysql/

1.4:配置/etc/my.cnf

datadir = /data/mysql
# 如果你有以下两行类似配置, 你也需要修改目录!
innodb_data_home_dir = /data/mysql
innodb_log_group_home_dir = /data/mysql

1.5:启动mysql服务

>service mysql start

2:常见问题Q&A

2.1 首先迁移完的目标目录的权限问题。

ERROR! The server quit without updating PID file 1

这个是权限问题,mysql没有这个目录下的权限 
因为刚复制过来的mysql文件的拥有者是root,所以要改变该目录的拥有者,执行下面命令来改变 

chown -R mysql:mysql /data/mysql/

2.2 用mysql客户端连接不上服务器

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'1

其实是你的mysql的配置文件没有配置正确。 
mysql启动如果没有读到

[client]
socket = /data/mysql/mysql.sock
port = 3306
host = localhost

这些配置,则mysql会默认找 /var/lib/mysql/mysql.sock文件, 
如果要解决这个问题就需要把上面的东西加入到你的/etc/my.cnf配置文件中。

下面普及下mysql的有关配置文件的知识,以前我也是迷迷糊糊,现在搞清楚了一些。 
用 service mysql start 命令启动mysql,mysql会默认找/etc/my.cnf 配置文件,如果没有找到,则会按照默认的启动目录来启动mysql 
就是【/var/lib/mysql】 
会在此目录下生成 10-4-19-161.pid 类似的pid文件 和 sock文件【mysql.sock】 
但是如果你建立的了my.cnf 文件则mysql会按照你的配置文件来启动mysql。

2.3 用户密码过期问题

Your password has expired. To log in you must change it using a client that supports expired passwords1

则需要修改 mysql的用户表 
刚开始以为修改用户密码就可以解决密码过期的问题,其实不是的。需要修改msyql.user表的 password_expired值 
Y表示已经过期,需要修改成N。 
首先在本机进入mysql

>mysql -uroot -pxxxxx
>use mysql>select host,user,password_expired from user;
+-------------+----------+------------------+| host        | user     | password_expired |
+-------------+----------+------------------+| localhost   | root     | Y                |
| 10-4-19-161 | root     | Y                |
| 127.0.0.1   | root     | Y                |
| localhost   | data     | N                || 127.0.0.1   | shangbao | N                |
+-------------+----------+------------------+

如果有些是Y,则需要吧哪些是Y的改为N。 

update set user.password_expired = ‘N’ where user.user = ‘root’;

root是你密码过期的用户

然后刷新权限

>flush privileges;

因为mysql的权限是启动的时候缓存起来的,如果修改的用户的权限,需要手动刷新用户权限才会生效

閲完此文,您的感想如何?
  • 有用

    4

  • 沒用

    1

  • 開心

    1

  • 憤怒

    2

  • 可憐

    1

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • [InnoDB] Failed to set NUMA memory policy of buffer pool page frames

  • 讓Mysql查詢後直接返回json字符串的方法

  • postgresql的pg_dump備份簡單方法

  • 使用sql語句在MySQL庫中去掉字段左邊、右邊指定字符串

我要說說
網上賓友點評