zoukankan      html  css  js  c++  java
  • MySQL 多实例及其主从复制

    Mysql 实例

    # 什么是 Mysql 单实例?
    	一个进程 + 多个线程 + 一个预分配的内存空间
    # Mysql 多实例
    	多个进程 + 多个线程 + 多个预分配的内存空间(分配给每个 Mysql 单实例)
    

    Mysql 多实例

    # mysql 多实例,即在单台服务器上启动多个实例,也是多个配置文件启动数据库
    
    mysql多个配置文件:
    1.多个端口(配置 my.cnf,使用 TCP/IP 连接时指定相应端口)
    2.多个 Socket 文件(配置 my.cnf,使用 Socket 连接时指定相应路径)
    3.多个日志文件(配置 my.cnf)
    4.多个 Server_id(配置 my.cnf)
    5.多个数据目录(初始化时指定 datadir)
    

    创建多实例目录

    [root@db03 ~]# mkdir /service/{3307,3308,3309}
    

    编辑配置文件

    [root@db03 ~]# vim /service/3307/my.cnf
    [mysqld]
    basedir = /service/mysql
    datadir = /service/3307/data
    port = 3307
    socket = /service/3307/mysql.sock
    server_id = 1
    log_err = /service/3307/data/mysql.err
    log_bin = /service/3307/data/mysql-bin
    
    [root@db03 ~]# vim /service/3308/my.cnf 
    [mysqld]
    basedir = /service/mysql
    datadir = /service/3308/data
    port = 3308
    socket = /service/3308/mysql.sock
    server_id = 2
    log_err = /service/3308/data/mysql.err
    log_bin = /service/3308/data/mysql-bin
    
    [root@db03 ~]# vim /service/3309/my.cnf 
    [mysqld]
    basedir = /service/mysql
    datadir = /service/3309/data
    port=3309
    socket=/service/3309/mysql.sock
    server_id=3
    log_err=/service/3309/data/mysql.err
    log_bin=/service/3309/data/mysql-bin
    

    初始化多实例数据目录

    [root@db03 scripts]# ./mysql_install_db --defaults-file=/service/3307/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3307/data
    
    [root@db03 scripts]# ./mysql_install_db --defaults-file=/service/3308/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3308/data
    
    [root@db03 scripts]# ./mysql_install_db --defaults-file=/service/3309/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3309/data
    

    授权目录

    [root@db03 service]# chown -R mysql.mysql /service/
    

    启动多实例

    [root@db03 service]# mysqld_safe --defaults-file=/service/3309/my.cnf &
    [root@db03 service]# mysqld_safe --defaults-file=/service/3308/my.cnf &
    [root@db03 service]# mysqld_safe --defaults-file=/service/3307/my.cnf &
    
    # 关闭其中的单个实例
    [root@db03 service]# mysqladmin -uroot -p123 -S /service/3307/mysql.sock shutdown
    [root@db03 service]# mysqladmin -uroot -p123 -S /service/3308/mysql.sock shutdown
    [root@db03 service]# mysqladmin -uroot -p123 -S /service/3309/mysql.sock shutdown
    

    连接多实例并验证

    [root@db03 service]# mysql -S /service/3307/mysql.sock -e "show variables like 'server_id'"
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | server_id     | 1     |
    +---------------+-------+
    [root@db03 service]# mysql -S /service/3308/mysql.sock -e "show variables like 'server_id'"
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | server_id     | 2     |
    +---------------+-------+
    [root@db03 service]# mysql -S /service/3309/mysql.sock -e "show variables like 'server_id'"
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | server_id     | 3     |
    +---------------+-------+
    

    Mysql 多实例设置密码

    [root@db03 service]# mysqladmin -S /service/3307/mysql.sock -uroot password '123'
    Warning: Using a password on the command line interface can be insecure.
    
    [root@db03 service]# mysqladmin -S /service/3308/mysql.sock -uroot password '123'
    Warning: Using a password on the command line interface can be insecure.
    
    [root@db03 service]# mysqladmin -S /service/3309/mysql.sock -uroot password '123'
    Warning: Using a password on the command line interface can be insecure.
    

    设置密码后连接

    [root@db03 service]# mysql -S /service/3307/mysql.sock -uroot -p
    Enter password:
    
    # 简单连接方式,也可以不指定密码,使用交互输入密码
    [root@db03 service]# cat /usr/bin/mysql3307
    mysql -S /service/3307/mysql.sock -uroot -p123
    
    [root@db03 service]# cat /usr/bin/mysql3308
    mysql -S /service/3308/mysql.sock -uroot -p123
    
    [root@db03 service]# cat /usr/bin/mysql3309
    mysql -S /service/3309/mysql.sock -uroot -p123
    
    [root@db03 service]# chmod +x /usr/bin/mysql33*
    

    Mysql 多实例主从复制

    主库操作

    1.开启binlog
    [root@db03 service]# vim /service/3307/my.cnf 
    [mysqld]
    basedir = /service/mysql
    datadir = /service/3307/data
    port = 3307
    socket = /service/3307/mysql.sock
    server_id = 1
    log_err = /service/3307/data/mysql.err
    log_bin = /service/3307/data/mysql-bin
    
    2.主库授权一个用户,给从库用来连接
    mysql> grant replication slave on *.* to rep@'172.16.1.%' identified by '123';
    Query OK, 0 rows affected (0.18 sec)
    
    3.主库查看binlog信息
    mysql> show master status;
    +------------------+----------+
    | File             | Position |
    +------------------+----------+
    | mysql-bin.000004 |      120 |
    +------------------+----------+
    1 row in set (0.00 sec)
    

    从库的操作

    # 从库需要知道的主库信息:主库的 IP,连接主库的用户和密码,binlog 信息
    # 注意:每一个从库的 server_id 都不能相同,且都大于主库(主库 server_id = 1,从库 server_id > 1)
    
    # 1.配置主从
    change master to
    master_host='172.16.1.53',
    master_user='rep',
    master_password='123',
    master_log_file='mysql-bin.000004',
    master_log_pos=120,
    master_port=3307;
    
    # 1.开启 IO 线程 和 SQL 线程
    mysql> start slave;
    Query OK, 0 rows affected (0.08 sec)
    

    IO线程 不为 YES

    1.测试网络
    [root@db03 ~]# ping 172.16.1.53
    
    2.测试端口
    [root@db03 ~]# telnet 172.16.1.53 3307
    
    3.测试主库授权的用户登录
    [root@db03 ~]# mysql -urep -p123 -h172.16.1.53 -P3307
    
    4.反向解析
    [root@db03 service]# vim /service/3307/my.cnf 
    skip-name-resolve
    
    5.UUID相同
    [root@db03 ~]# cat /service/3307/data/auto.cnf 
    [auto]
    server-uuid=527f6221-c286-11ea-9ca7-000c29e19d84
    

    SQL线程 不为 YES

    # 一般情况:主库有数据,从库没有,或者从库有数据,主库没有
    # 原因:从库获取主库的信息后(获取 bin-log 日志 file 名称,以及 bin-log 日志 的 position 位置),从库从 position 位置开始同步(bin-log 中记录执行过的 SQL 语句),如果从库已经存在某些表或其他数据,同步会出错
    # 即主从数据库数据不一致
    # 解决方法:删除从库多余数据,重新同步主库数据(先获取 Pos 值,再同步)
    
  • 相关阅读:
    ajax数据查看工具(chrome插件)
    JavaScript性能优化小知识总结
    jsonp
    学习Javascript闭包(Closure)
    浅析闭包和内存泄露的问题
    设备像素比
    【前端福利】用grunt搭建自动化的web前端开发环境-完整教程
    java开发的web下载大数据时的异常处理
    Node.js中的exports与module.exports的区分
    Task与Thread间的区别
  • 原文地址:https://www.cnblogs.com/zzzwqh/p/13281078.html
Copyright © 2011-2022 走看看