zoukankan      html  css  js  c++  java
  • Linux系统mysql多实例主从

    一、mysql结构

    1.实例

    1.什么是单实例
    	一个进程 + 多个线程 + 一个预分配的内存空间
    2.多实例
    	多个进程 + 多个线程 + 多个预分配的内存空间
    

    2.mysql程序结构

    1)连接层

    1.验证用户身份
    2.提供两种连接方式
    3.与sql层建立线程
    

    2)sql层

    1.接收连接层发过来的sql语句
    2.判断sql的语法
    3.判断sql的语义
    4.解析器:解析sql语句,生成执行计划
    5.优化器:选择最优执行计划
    6.执行器:执行选择出来的计划,SQL
    	6.1 与存储引擎层建立交互,将sql语句传给存储引擎层
    	6.2 将存储引擎层传来的数据以表格的形式展示出来
    7.将数据写入缓存
    8.记录日志
    

    3)存储引擎层

    1.与sql层建立交互,接收sql层传来sql语句
    2.与磁盘建立交互,获取数据
    

    3.mysql逻辑结构

    1.库:库的下面全是表
    2.表:元数据 + 真实数据行
    3.元数据:列 + 其它属性(行数+占用空间大小+权限)
    4.列:列名字 + 数据类型 + 其他约束(非空、唯一、主键、非负数、自增长、默认值)
    

    4.mysql物理结构

    1.MySQL的最底层的物理结构是数据文件,也就是说,存储引擎层,打交道的文件,是数据文件。
    2.存储引擎分为很多种类(Linux中的FS)
    3.不同存储引擎的区别:存储方式、安全性、性能
    
    #数据库创建时,不论库名还是表名,尽量都用小写字母
    

    5.mysql物理大小

    1.段:理论上一个表就是一个段,由多个区构成,(分区表是一个分区一个段)
    2.区:连续的多个页构成
    3.页:最小的数据存储单元,默认是16k
    
    4.分区表:一个区构成一张段,就是一张表
    

    二、mysql的多实例

    #mysql 多实例,也是多个配置文件启动数据库
    
    mysql多个配置文件:
    1.多个端口
    2.多个socket文件
    3.多个日志文件
    4.多个srver_id
    5.多个数据目录
    

    1.创建多实例目录

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

    2.编辑配置文件

    [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
    

    3.初识化多实例数据目录

    [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
    

    4.授权目录

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

    5.启动多实例

    [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 &
    

    6.连接多实例并验证

    [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     |
    +---------------+-------+
    [root@db03 service]# mysql -S /service/3307/mysql.sock -e "show variables like 'server_id'"
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | server_id     | 1     |
    +---------------+-------+
    

    7.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.
    

    8.设置密码后连接

    [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*
    

    三、数据库多实例主从复制

    1.主库操作

    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)
    

    2.从库的操作

    #从库需要知道的主库信息
    主库的IP
    连接主库用的用户和密码
    binlog信息
    
    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)
    

    3.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
    

    4.SQL线程不为YES

    1.主库有数据,从库没有
    2.从库有数据,主库没有
    #主从数据库数据不一致
    
  • 相关阅读:
    面试中遇到递归算法题别慌--常见递归算法题的解题思路
    Xml日志记录文件最优方案(附源代码)
    linux下源码安装软件
    文本比较算法Ⅴ——回顾贴,对前面几篇文章的回顾与质疑
    从内存中直接运行PE程序
    谈谈Linux内核驱动的coding style
    【全面解禁!真正的Expression Blend实战开发技巧】第六章 认识ListBox
    玩转C链表
    麻省理工《C内存管理和C++面向对象编程》笔记---第一讲:认识C和内存管理
    Dll注入技术之输入法注入
  • 原文地址:https://www.cnblogs.com/zabcd/p/13293378.html
Copyright © 2011-2022 走看看