美文网首页
MySQL 多实例部署

MySQL 多实例部署

作者: eriolchan | 来源:发表于2017-09-24 15:36 被阅读418次

    最近在做高可用方面的改进,需要将业务相关的数据库和管理系统的数据库相互隔离,以实现分别维护操作。这里利用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
    

    相关文章

      网友评论

          本文标题:MySQL 多实例部署

          本文链接:https://www.haomeiwen.com/subject/udkhextx.html