从mysql迁移至mariadb

VPS最大的好处就是可以不断的折腾,就像这样,把数据库从MySQL 5.5.28迁移到了MariaDB 5.5.34。

因为军哥的lnmp一键安装包没有升级数据库的脚本,只好自己摸索着来,还好在本地搭了个同系统的虚拟机,首先在虚拟机上调试脚本,然后上传到VPS运行。

首先要备份好数据,以防万一。

#导出数据库数据,迁移时用于导入
mysqldump -uroot -p你的密码 你的数据库 > /tmp/你的文件.sql

不过这样要一个一个导出,不如用phpmyadmin全部一起方便。

#停止mysql服务
/etc/init.d/mysql stop
#重命名相关文件,先别删,万一不行还可以恢复
mv /etc/inid.d/mysql /etc/init.d/mysql.old
mv /etc/my.cnf /etc/my.cnf.old

虽然我的系统是CentOS,mariadb有rpm包,但本着折腾的原则,还是用源码包自己编译。。。注意需要CMAKE

wget https://downloads.mariadb.org/interstitial/mariadb-5.5.34/kvm-tarbake-jaunty-x86/mariadb-5.5.34.tar.gz/from/http://mirror.jmu.edu/pub/mariadb
tar zxvf mariadb-5.5.34.tar.gz
cd mariadb-5.5.34
#这些参数自己自己度娘一下什么意思
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mariadb \
-DMYSQL_DATADIR=/usr/local/mariadb/data/ \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DWITH_ARIA_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_EXTRA_CHARSETS=all \ #据说这个很关键
-DEXTRA_CHARSETS=all #据说这个也很关键

make install

一番等待后,编译安装完成

#复制相关文件
cp support-files/mysql.server /etc/init.d/mysql #服务管理
cp support-files/my-small.cnf /usr/local/mariadb/my.cnf  #默认配置
chmod +x /etc/init.d/mysql
mkdir -p /usr/local/mariadb/data/ #创建数据库存储目录
mkdir -p /usr/local/mariadb/tmp/ #临时目录
chown mysql:mysql -R /usr/local/mariadb #给用来运行数据库的用户授权,这里沿用原来的
#修改配置
sed '/mysqld]/a\pid-file = /usr/local/mariadb/tmp/mariadb.pid' -i /usr/local/mariadb/my.cnf
sed '/mysqld]/a\datadir = /usr/local/mariadb/data' -i /usr/local/mariadb/my.cnf
sed '/mysqld]/a\basedir = /usr/local/mariadb' -i /usr/local/mariadb/my.cnf
sed '/mysqld]/a\user = mysql' -i /usr/local/mariadb/my.cnf
sed '/#innodb_lock_wait_timeout = 50/a\log_error = /usr/local/mariadb/data/mariadb.err' -i /usr/local/mariadb/my.cnf
#初始化数据库
/usr/local/mariadb/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb --datadir=/usr/local/mariadb/data
/etc/init.d/mysql start
#创建目录链接,这里如果原来安装过lnmp肯定会提示文件或目录已存在,自己先移除
ln -s /usr/local/mariadb/lib /usr/lib/mysql
ln -s /usr/local/mariadb/include /usr/include/mysql
# 创建执行文件链接
ln -s /usr/local/mariadb/bin/mysql /usr/bin/mysql
ln -s /usr/local/mariadb/bin/mysqldump /usr/bin/mysqldump
ln -s /usr/local/mariadb/bin/myisamchk /usr/bin/myisamchk
ln -s /usr/local/mariadb/bin/mysqld_safe /usr/bin/mysqld_safe
# 管理动态链接库
ldconfig
#设置root密码
/usr/local/mariadb/bin/mysqladmin -u root password 你的数据库密码
# 修改root密码 / 删除初始非 root 的用户 / 删除空密码的root
# 删除test测试库 / 禁止root远程连接权限 / 刷新权限
cat > /tmp/mysql_sec_script.sql< <EOF
use mysql;
update user set password=password('你的数据库密码') where user='root';
delete from user where not (user='root') ;
delete from user where user='root' and password='';
drop database test;
DROP USER ''@'%';
flush privileges;
EOF
/usr/local/mariadb/bin/mysql -uroot -p你的数据库密码 -h localhost < /tmp/mysql_sec_script.sql #设置系统启动时自动启动 chkconfig --level 345 mysql on #导入之前备份的数据,注意要先创建同名空数据库 
cat - 你的文件1 >> 你的文件1.new.sql >>EOF #把创建数据库的命令添加到导入文件中
CREATE DATABASE IF NOT EXISTS '你的数据库名';
USE '你的数据库名';
EOF
#导入,需要导入多次。。。烦,还是phpmyadmin方便
/usr/local/mariadb/bin/mysql -uroot -p你的数据库密码 -h localhost < 你的文件绝对路径
#清理
rm -f /tmp/*.sql

登录phpmyadmin看看
Screenshot
测试一下,几天,一个月,确定没有问题了,再把相关文件删除

rm -f /etc/init.d/mysql.old
rm -f /etc/my.cnf.old
rm -Rf /usr/local/mysql

参考资料:MariaDB-5.5.33a 编译安装
作者:Mehost

You might also like

1 Comment

  1. Leyla says

    It’s imprtaeive that more people make this exact point.

Leave A Reply

Your email address will not be published.