MySQL 多实例部署

最近在做高可用方面的改进,需要将业务相关的数据库和管理系统的数据库相互隔离,以实现分别维护操作。这里利用mysqld_multi 来部署多个实例。

1. 安装MySQL 5.6

$ sudo apt-get purge mysql-server-5.5 mysql-client-5.5
$ sudo apt-get install mysql-server-5.6

2. 迁移数据库文件到SSD 目录

$ sudo service mysql stop
$ sudo cp -R /var/lib/mysql /data/s1/mysql
$ sudo chown -R mysql:mysql /data/s1/mysql

将SSD 的目录添加到apparmor 配置文件中

$ sudo vim /etc/apparmor.d/usr.sbin.mysqld

在最后添加以下内容,允许对该文件下的读写操作,其中的路径名十分重要,否则mysql 将因为权限问题无法启动成功。

/data/s1/mysql/ r,
/data/s1/mysql/** rwk,
/var/run/mysqld/** rw,
/run/mysqld/** rw,

重新加载apparmor,使配置生效

$ sudo service apparmor reload

3. 配置多实例

使用自带的mysqld_multi 工具进行多个实例的管理,在更改my.cnf 文件前先进行备份

$ sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak

可以使用以下命令生成example 文件,并在该基础上进行修改

$ mysqld_multi --example

在配置文件中多个实例使用 mysqldN 进行表示,其中N 代表实例的id,用于在mysqld_multi 命令中指定实例

[mysqld_multi]
mysqld     = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user       = multi_admin
password   = my_password

[mysqld1]
user       = mysql
pid-file   = /var/run/mysqld/mysqld1.pid
socket     = /var/run/mysqld/mysqld1.sock
port       = 3306
basedir    = /usr
datadir    = /data/s1/mysql/mysqld1

[mysqld2]
user       = mysql
pid-file   = /var/run/mysqld/mysqld2.pid
socket     = /var/run/mysqld/mysqld2.sock
port       = 3307
basedir    = /usr
datadir    = /data/s1/mysql/mysqld2

如果在datadir 下还没有数据库文件,可以使用以下命令生成一个新的数据库文件

$ sudo cp /etc/mysql/my.cnf /usr/share/mysql/my-default.cnf
$ sudo mysql_install_db --datadir=/data/s1/mysql/mysqld1

3.1 启动数据库实例

可以通过指定id 来启动某个数据库实例,若不指定,则代表启动所有的实例

$ sudo mysqld_multi start 1 # 启动1号实例
$ sudo mysqld_multi start   # 启动所有实例

对于新建的数据库文件,可以使用以下命令进行root 密码设置和基本的MySQL 安全配置。由于mysql_secure_installation 工具默认使用 /var/run/mysql/mysqld.sock 文件进行连接,可以通过创建软连接来指向自定义的socket 文件。

$ sudo mysqladmin -u root -S /var/run/mysqld/mysqld1.sock password 'password'
$ sudo ln -s /var/run/mysql/mysqld1.sock /var/run/mysqld/mysqld.sock
$ mysql_secure_installation

3.2 关闭数据库实例

需要在数据库实例上创建一个账户用来关闭数据库,该账户的用户名和密码和[mysqld_multi] 中配置的一样

> GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost' IDENTIFIED BY 'my_password';
> FLUSH PRIVILEGES;

由于在5.6中mysqld_multi 读取的[mysqld_multi] 密码为*,需要修改mysql_multi 的源文件来正确读取明文的密码

$ sudo vim /usr/bin/mysqld_multi

在该文件的216行中,添加-s 参数

# Line: 216
# my $com= join ' ', 'my_print_defaults', @defaults_options, $group;
my $com= join ' ', 'my_print_defaults -s', @defaults_options, $group;

可以通过指定id 来关闭某个数据库实例,若不指定,则代表关闭所有的实例

$ sudo mysqld_multi stop 1 # 关闭1号实例
$ sudo mysqld_multi stop   # 关闭所有实例

3.3 查看实例状态

$ sudo mysqld_multi report
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容