因为要做binlog replication相关的毕设,于是整了个虚拟机,里面装多个mysql实例进行主从同步。
最早的时候头铁直接百度照着做,结果没跑起来不说,本来的单个实例还出了些问题,干脆重装虚拟机,然后痛定思痛,还是抱官方爸爸的大腿:4.3.4 mysqld_multi - Manage Multiple MySQL Serversdev.mysql.com
想要使用mysqld_multi进行多实例控制,但是文档里写:Note
For some Linux platforms, MySQL installation from RPM or Debian packages includes systemd support for managing MySQL server startup and shutdown. On these platforms, Section 2.5.9, “Managing MySQL Server with systemd”.
刚好虚拟机是ubuntu18.04,遂转systemd。
步骤
按照官方爸爸的文档,修改/etc/mysql/mysql.conf.d/mysqld.cnf,加入要加入的组
[mysqld@replica01]
datadir=/var/lib/mysql-replica01
socket=/var/lib/mysql-replica01/mysql.sock
port=3307
log-error=/var/log/mysqld-replica01.log
[mysqld@replica02]
datadir=/var/lib/mysql-replica02
socket=/var/lib/mysql-replica02/mysql.sock
port=3308
log-error=/var/log/mysqld-replica02.log
只不过我选择了不同的数据文件加名称和组名称。在这里mysqld后面的@是一个分隔符。
然后sudo mkdir /var/lib/mysql-replica01,之后chown -R mysql.mysql,万事俱备,systemctl start mysql@replica01——
并没有跑起来。
而且这沙雕报错啥都看不出。
但是危难之中想起了,mysql也是有log的呀!结果确实,mysql的log显示创建某文件失败。可是我chown了。一番百度之后,得知应该修改apparmor的内容,修改/etc/apparmor.d/usr.sbin.mysqld,把刚刚cnf里面写的datadir给上权限,记得reload和restart apparmor的service,再启动一次实例。
但是还是启动失败。
继续查看mysql的log,显示某表不存在。百度之,解决方案是将旧实例中的mysql库复制过去。但是我直接把新实例datadir下的内容删除,再接着重启数次,竟然就成功了...
至此,mysql@replica01已经成功跑起。
需要注意,新实例的初始密码是在旧实例的error-log里,而不是新实例,因为使用的是[mysqld]下面的配置。