在老早之前,就听说了MySQL在被甲骨文收了之后就不怎么安分了,于是有了性能相对好点的MariaDB。除了两者接口基本兼容之外,另外他们的数据格式其实有相通的地方。所以,这才让迁移成为了可能。
迁移方法
在迁移之前,需要注意一下,版本一定要对应好。
- MySQL 5.6 需要安装 MariaDB 10.0+来迁移
- MySQL 5.7 需要安装 MariaDB 10.2+来迁移
- MySQL 8.0+的乖乖用
mysqldump
导出吧
导入软件源
毕竟ubuntu 18.04自己的源里面的MariaDB的版本只到10.1,所以要装MariaDB 10.2的话,需要自己导入源。
注:Debian 9自带源中,MySQL是MariaDB的一个别名,所以不需要迁移了。
在自己的终端中输入:
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.2/ubuntu bionic main'
$ sudo apt update
如果使用的是Ubuntu 16.04,需要把其中的bionic
改为xenial
。
改装MariaDB
这里其实很简单,安装MariaDB即可覆盖MySQL:
$ sudo apt install mariadb-server mariadb-client
随后进行一下数据库升级:
$ mysql_upgrade -u root -p
各种奇怪的锅
其实这个MariaDB,有很多很多奇奇怪怪的地方,包括但不限于以下的,需要接一下锅。
- 提供了一套sys-V的启动方法,只是是使用
mysqladmin
关服的 - 默认的root用户是使用unix-socket来认证的
- 回送systemd的方式会被ubuntu系统的apparmor拦截的
无法使用mysqladmin shutdown
直接关服
这种情况,多出现在从MySQL直接迁移到MariaDB的情况。默认的MariaDB是使用unix-socket来认证的,所以在root用户情况下是不需要密码即可完成的,而在别的用户上,是无论如何都登不上去的。
root无法执行mysqladmin
这时候需要给root修改认证插件为unix-socket,使得可以在不加-p
的时候直接运行。
update mysql.user set plugin = "unix_socket" where user = "root";
flush privileges;
认证时提示Plugin 'unix_socket' is not loaded
这时候给/etc/mysql/mariadb.conf.d/50-server.cnf
的[mysqld]
加上这样一句话:
[mysqld]
# ...
plugin-load-add = auth_socket.so
之后来一个restart一下即可。
使用systemctl启停卡住,超时后返回Job for mariadb.service failed because a timeout was exceeded.
在这个源提供的启动脚本,包括了SysV的和systemd的,而不像官方源的一样,mysql.service只是mariadb.service的一个别名。同时,与apparmor的不适应,使得无法将启动完成的参数传回systemd。这时候可能需要一些爆改。
禁用SysV的启动脚本
$ sudo /lib/systemd/systemd-sysv-install disable mysql
禁用apparmor对MariaDB服务的限制
在/etc/apparmor.d/usr.sbin.mysqld
里面加入以下内容:
/usr/sbin/mysqld {
}
然后再运行:
$ sudo aa-disable /usr/sbin/mysqld
$ sudo reboot
如果提示命令不存在,需要安装包apparmor-utils
。
czj
沙发
huhu
啊哈,有时间也升一下