MySQL迁移数据目录(迁移数据库、表、InnoDB系统表空间、状态文件/日志文
前面文章讨论了默认配置里的数据目录结构,所有的数据库、状态文件和日志文件都位于其中。不过mssql数据库迁移,在确定数据目录内容的存放位置方面,也有一些回旋的余地。MySQL允许你
概述 前面文章讨论了默认配置里的数据目录结构,所有的数据库、状态文件和日志文件都位于其中。不过mssql数据库迁移,在确定数据目录内容的存放位置方面,也有一些回旋的余地。MySQL允许你迁移数据目录本身或者其中的某些元素。 你想这样做的理由可能有以下几种: 本文将讨论数据目录的哪一部分可以移动,以及如何进行移动。 迁移方法 迁移数据目录或其中各个部分的方法有两种。 第一种,在任何平台上,你都可以在服务器启动时,通过命令行或者选项文件,指定一个选项。例如,想要指定数据目录的位置,可以在服务器启动时,在命令行上使用--datadir=dir_name选项来指定,或者将下面的行放入某个选项文件中来指定: ??[mysqld] datadir = dir_name?? 第二种,在Unix上,可以先移动要迁移的文件或目录,然后在原来位置生成一个符号链接,指向新位置。 这两种方法都不能完全适用于可迁移的所有内容。下表总结了哪些是可迁移的,可以采用哪种迁移方法。如果使用的是选项文件,则可以在全局选项文件(如Unix里的/etc/my.cnf,或者Windows里的C:\my.cnf)中指定各种选项。 迁移实体 适用的迁移方法 整个数据目录 启动选项或符号链接 各个数据库目录 符号链接 各个数据库表 符号链接 InnoDB表空间文件 启动选项 服务器PID文件 启动选项 日志文件 启动选项 迁移注意事项 如果不遵守这几点,可能会导致表损坏。 迁移整个数据目录 在迁移数据目录时,要停止MySQL服务器,并把数据目录移至新的位置。在移动之后,要使用能明确指示新位置的--datadir选项来重启服务器。 在Unix上,除了使用--datadir以外,还可以在原来的数据目录里创建一个符号链接,让它指向新位置。 1. 停掉 MySQL 服务 service mysqld stop 2. 确认迁移目录 mkdir -p /data/mysql 3. 把 data 目录拷贝到目标目录 / data cp -aR /opt/mysql/data /data/mysql/data 4. 修改权限 (mysql 的运行账户为 “mysql“用户),否则 MySQL 启动会报错: chown -R mysql.mysql /data/mysql 5. 修改 MySQL 配置文件, 将 data 目录修改至新分区: vim /etc/my.cnf datadir = /data/mysql/data 6. 启动服务,验证服务访问是否正常 service mysqld start 7. 备份旧数据目录 mv /opt/mysql/data /data/data-old 8. 重启 MySQL 服务,验证服务访问是否正常: service mysqld restart 迁移单个数据库 服务器总是会在数据目录里查找数据库目录,因此迁移数据库的唯一方法是使用符号链接。这个过程在Unix和Windows上有所不同。 在Unix上,迁移数据库的过程如下: (1)停止正在运行的Mysql服务。 mysqladmin -p -u root shutdown (2)把数据库移至新的位置;或者将其复制过去,并删除原来那个。 cd /usr/local/mysql/data tar cf - bigdb | (cd /data/mysql; tar xf -) rm -rf bigdb (3)在数据目录中创建一个符号链接,让其具有原来那个数据库的名字,并指向那个新的数据库位置。 ln -s /data/mysql/bigdb bigdb (4)重启服务器。 mysqld_safe & 迁移单个表 只有在满足以下条件时才能迁移单个表: SHOW VARIABLES LIKE 'have_symlink'; 如果上述两个条件都满足,那么你便可以把表的.MYD数据文件和.MYI索引文件移动到新的位置;接着在原来的数据文件和索引文件所在的数据库目录里创建符号链接,分别指向它们。(.frm文件仍然需要留在原来的数据库目录里)。 在执行此操作之前,可以在移动文件时停止Mysql服务;也可以锁定表,以防止服务器使用它。 迁移InnoDB系统表空间 在初次配置InnoDB系统表空间时,可以使用innodb_data_home_dir和innodb_data_file_path系统变量,将InnoDB系统表空间的各个组成文件罗列在某个选项文件里。(更多相关细节请参考后面"存储引擎配置"文章)。 如果你已经创建了表空间,可能就可以迁移组成它的那些常规文件,例如,把它们分散到不同的文件系统里。因为文件的位置是通过系统变量来指定的,所以你必须按以下步骤来迁移部分或者全部的表空间文件: (1)停止mysql服务。 (2)移动需要迁移的表空间文件。 (3)修改定义InnoDB配置的那个选项文件,修改为文件迁移后的新位置。 (4)重启mysql服务。 迁移状态文件和日志文件 如果要迁移PID文件或日志文件,则需要先停止MySQL服务器,然后使用一个可以指定文件新位置的选项来重启它。例如,为把PID文件创建为/tmp/mysql.pid,可以在命令行上使用--pid-file=/tmp/mysql.pid选项,或者在某个选项文件里包含以下内容: [mysqld] pid-file = /tmp/mysql.pid 如果是用绝对路径名来指定文件名,那么服务器会使用该路径名来创建文件。如果使用的是相对路径名,那么服务器将在其自己的数据目录中创建该文件。例如,当指定--pid-file=mysqld.pid时,这个PID文件即为数据目录下的mysqld.pid。 有些系统会把各种服务器的PID文件保存在某个特定的目录里,如/var/run。你可能也会想要把MySQL的PID文件保存到那里,从而与系统操作的保持一致。类似地,如果你的系统把日志文件都保存在/var/log目录里,那么你也可以把MySQL的日志文件放置到那里。不过,许多系统都只允许root用户对这些子目录进行写操作。这意味着,你必须以root用户权限来运行服务器——从安全的角度来讲,这可是个不太好的做法。比较可行的做法是:创建两个子目录/var/run/mysql和/var/log/mysql,并把它们的所有者设置成你用于运行服务器的那个账户。例如,这个账户的用户名和用户组名都是mysql,以root用户的身份执行以下命令: mkdir /var/run/mysql chown mysql.mysql /var/run/mysql chmod 770 /var/run/mysql mkdir /var/log/mysql chown mysql.mysql /var/log/mysql chmod 770 /var/log/mysql 然后,服务器就能毫无问题地在这些目录里写入文件了,并且可以使用指定这些文件所在位置的选项来启动服务器。例如: [mysqld] pid-file = /var/run/mysql/mysql.pid log-error = /var/log/mysql/mysql.error general_log = 1 general_log_file = /var/log/mysql/querylog log-bin = /var/log/mysql/binlog (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |