MariaDB存储目录迁移

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MariaDB存储目录迁移相关的知识,希望对你有一定的参考价值。

参考技术A

参考来源: https://mariadb.com/kb/en/library/default-data-directory-for-mariadb/

基本操作和mysql移动是一样的

一般mysql默认的存储目录在 /var/lib/mysql 中

注意文件的权限, 以及用户和用户组都为 mysql , 这个很重要 .

假设我们要将mysql目录移到/home/data_storage下
执行

这里 p 表示把源文件或目录下的所具有的权限一同复制到目标目录或文件, r 表示递归

在[mysqld]下, 修改datadir的值(没有自己加上)

然后, 保存后启动mariadb, 至此, mariadb的迁移已完成 (没成功的继续看下面)

在ubuntu中,有些敏感操作受到了apparmor的限制 ,mysql也受到了限制, 所以要修改这个

加入

然后在启动mysql之前, 重新加载apparmor

移动完mysql目录, 并修改好datadir后, 启动仍可能会遇到如下错误:

除了要检查mysql目录的权限, apparmor配置以外, 还要留意mysql目录的所有父级目录的执行权限. mariadb官方是如下要求的:
This is usually a permission error on the directory in which this file is being written. Ensure that the entire datadir is owned by the user running mysqld, usually mysql. Ensure that directories have the "x" (execute) directory permissions for the owner. Ensure that all the parent directories of the datadir upwards have "x" (execute) permissions for all (user, group, and other).
Once this is checked look at the systemd and selinux documentation below, or apparmor.

二进制安装mariadb的奇妙经历

二进制安装mariadb的奇妙经历

1. MariaDB介绍

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL。基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎。虽然MariaDB被视为MySQL数据库的替代品,但它在扩展功能、存储引擎以及一些新的功能改进方面都强过MySQL。而且从MySQL迁移到MariaDB也是非常简单的。

详情点击mariadb官方站点

2. 二进制安装mariadb

下载二进制包:安装包:mariadb-10.2.8

# wget https://downloads.mariadb.org/interstitial/mariadb-10.2.8/bintar-linux-x86_64/mariadb-10.2.8-linux-x86_64.tar.gz/from/http%3A//mirrors.tuna.tsinghua.edu.cn/mariadb/

解压到/usr/local下

# tar -xvf index.html -C  /usr/local/

解压后的相关目录说明:

bin:            各种二进制都在此目录下
data:           如果我们不创建新目录的话,此目录就是默认的数据目录。所以权限必须是属主和属组都是mysql
docs:           相关 文档include:        头文件lib:            库文件man:            帮助手册
mysql-test:     mysql测试组件
scripts:        mysql初始化时要用到的脚本
share:          mysql的共享内容
sql-bench:      对mysql做压力测试工具
support-files:  mysql正常运行的样例性的配置文件或文档

做一个软连接。切换到mariadb目录下。并参考一个安装说明文档

# ln -s /usr/local/mariadb-10.2.8-linux-x86_64/ /usr/local/mysql
# cd /usr/local/mysql/
# vim INSTALL-BINARY
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> cd /usr/local
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysqlshell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> bin/mysqld_safe --user=mysql &

创建mysql用户和组,并修改mariadb下的权限

# groupadd mysql
# useradd -r -s /sbin/nologin -g mysql mysql
# chown -R mysql.mysql .

初始化脚本。使用mysql_install_db初始化数据库,使用--user定义数据库名称,--basedir定义软件主目录,--datadir定义数据库的存放目录,初始化完成后,将mysql的配置文件拷贝一份到my.cnf下。然后通过软件包提供的启动脚本mysql.server来管理服务进程并启动。

# mkdir -p /data/
# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/
# cp support-files/my-small.cnf /etc/my.cnf
# cp -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# /etc/init.d/mysqld start
 Starting mysqld (via systemctl): 
 Warning: mysqld.service changed on disk. 
 Run ‘systemctl daemon-reload‘ to reload units.Job for mysqld.service 
 failed because the control process exited with error code. 
 See "systemctl status mysqld.service" and "journalctl -xe" for details.
                                                       [失败]

这时发现启动失败:查看日志,发现并没有什么有用的信息。

# systemctl status mysqld.service
# tail -f /var/log/messages
Aug 20 11:58:56 php systemd: Starting LSB: start and stop MySQL...
Aug 20 11:58:57 php mysqld: Starting MySQL.170820 11:58:57 mysqld_safe Logging to ‘/usr/local/mysql/data/php.err‘.
Aug 20 11:58:57 php mysqld: 170820 11:58:57 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/dataAug 20 11:58:57 php mysqld: ERROR!
Aug 20 11:58:57 php systemd: mysqld.service: control process exited,     code=exited status=1Aug 20 11:58:57 php systemd: Failed to start LSB: start and stop MySQL.
Aug 20 11:58:57 php systemd: Unit mysqld.service entered failed state.
Aug 20 11:58:57 php systemd: mysqld.service failed.

在查看/data/php.err日志:发现报错信息

# tail /usr/local/mysql/data/php.err 
2017-08-20 12:03:26 139715621869376 [ERROR] Can‘t open and lock privilege tables: Table ‘mysql.servers‘ doesn‘t exist
2017-08-20 12:03:26 139715621869376 [Note] Server socket created on IP: ‘::‘.
2017-08-20 12:03:26 139715621869376 [ERROR] Fatal error: Can‘t open and lock privilege tables: Table ‘mysql.user‘ doesn‘t exist

经过请教得:在配置文件my.cnf的[mysqld]下添加datadir = /data/mysql 指明数据库的路径。 就好了。重启成功。

# /etc/init.d/mysqld startStarting mysqld (via systemctl):                           [  确定  ]# ss -tnl|grep 3306LISTEN     0      80          :::3306                    :::*

配置好shell环境:

# PATH=$PATH:/usr/local/mysql/bin/
# echo "export PATH=$PATH:/usr/local/mysql/bin/">>/etc/profile

总结:被启动这个问题困扰了大概好几个小时。期间查询网上信息,未果。最后请教老师,被这一条语句所折服。这就足以看出经验的重要性了。


本文出自 “dianel简单不简单” 博客,请务必保留此出处http://dianel.blog.51cto.com/12170393/1957801

以上是关于MariaDB存储目录迁移的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Laravel 迁移使用 mysql/mariaDB 功能

二进制安装mariadb的奇妙经历

如何把mariadb迁移到mysql

将 Hypersonic DB 迁移到 MySQL/MariaDB

迁移一套mariadb+maxscale到另外一套mariadb+maxscale上

迁移一套mariadb+maxscale到另外一套mariadb+maxscale上