zoukankan      html  css  js  c++  java
  • mysql主从

    1.主库操作

    1.主库配置server_id
    2.主库开启binlog
    3.主库授权从库连接的用户
    4.查看binlog信息
    5.导出所有数据
    

    2.从库操作

    1.从库配置server_id(跟主库不一致)
    2.确认主库授权的用户可以连接主库
    3.同步主库数据
    4.配置主库信息(change master to)
    5.开启slave
    

    3.主从复制原理

    1.主库配置server_id和开启binlog
    2.主库授权从库连接的用户
    3.主库查看binlog信息,与服务器信息
    4.从库配置跟主库不一致server_id
    5.配置主从,通过change master to高速从库主库的信息:ip、用户、密码、端口、binlog位置点、binlog名字
    6.从库开启IO线程和sql线程
    7.从库连接主库以后,IO线程会向主库的dump线程发起询问,询问是否有新数据
    8.dump线程被询问,去查找新数据,并将新数据返回给IO线程
    9.IO线程拿到数据先写入TCP缓存
    10.TCP缓存将数据写入中继日志,并返回给IO线程一个ACK
    11.IO线程收到ACK会记录当前位置点到master.info
    12.sql线程会读取relay-log,执行从主库获取的sql语句
    13.执行完以后将执行到的位置点,记录到relay-log.info
    

    4.主从中涉及到的文件或者线程

    1.主库

    1.binlog:主库执行的sql语句
    2.dump线程:对比binlog是否更新,获取新的binlog
    

    2.从库

    1.IO线程:连接主库,询问新数据,获取新数据
    2.SQL线程:执行从主库哪来的sql语句
    3.relay-log:中继日志,记录从主库拿过来的binlog
    4.master.info:记录主库binlog信息,会随着同步进行更新
    5.relay-log.info:记录sql线程执行到了那里,下次从哪里开始执行
    

    主从复制的搭建

    1.主库操作

    1.配置

    [root@db03 ~]# vim /etc/my.cnf
    [mysqld]
    server_id=1
    log_bin=/service/mysql/data/mysql-bin
    
    [root@db03 ~]# /etc/init.d/mysqld start
    

    2.授权一个用户

    mysql> grant replication slave on *.* to rep@'172.16.1.%' identified by '123';
    Query OK, 0 rows affected (0.03 sec)
    

    3.查看binlog信息

    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000003 |      326 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    

    4.导出所有数据

    [root@db03 data]# mysqldump -uroot -p -A --master-data=2 --single-transaction > /tmp/full.sql
    
    [root@db03 data]# scp /tmp/full.sql 172.16.1.52:/tmp/
    

    2.从库操作

    1.配置

    [root@db02 ~]# vim /etc/my.cnf
    [mysqld]
    server_id=2
    
    [root@db02 ~]# /etc/init.d/mysqld start
    

    2.验证主库用户

    [root@db02 ~]# mysql -urep -p -h172.16.1.53
    

    3.同步数据

    [root@db02 ~]# mysql -uroot -p123 < /tmp/full.sql
    

    4.配置主从

    change master to
    master_host='172.16.1.53',
    master_user='rep',
    master_password='123',
    master_log_file='mysql-bin.000003',
    master_log_pos=326,
    master_port=3306;  # 配置了端口就需要加上端口
    Query OK, 0 rows affected, 2 warnings (0.02 sec)
    

    5.开启线程

    mysql> start slave;
    

    6.查看主从

    mysql> show slave statusG
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    

    3.主从数据库出错

    1.IO线程出错

    mysql> show slave statusG
                 Slave_IO_Running: No
                Slave_SQL_Running: Yes
                
    mysql> show slave statusG
                 Slave_IO_Running: Connecting
                Slave_SQL_Running: Yes
                
    #排查思路
    1.网络
    	[root@db02 ~]# ping 172.16.1.53
    2.端口
    	[root@db02 ~]# telnet 172.16.1.53 3306
    3.防火墙
    4.主从授权的用户错误
    5.反向解析
    	skip-name-resolve
    6.UUID或server_id相同
    

    2.SQL线程出错

    mysql> show slave statusG
                 Slave_IO_Running: Yes
                Slave_SQL_Running: No
    
    #原因:
    1.主库有的数据,从库没有
    2.从库有的数据,主库没有
    
    #处理方式一:自欺欺人
    1.临时停止同步
    mysql> stop slave;
    2.将同步指针向下移动一个(可重复操作)
    mysql> set global sql_slave_skip_counter=1;
    3.开启同步
    mysql> start slave;
    
    #处理方式二:掩耳盗铃
    1.编辑配置文件
    [root@db01 ~]# vim /etc/my.cnf
    #在[mysqld]标签下添加以下参数
    slave-skip-errors=1032,1062,1007
    
    #处理方式三:正解
    重新同步数据,重新做主从
    
  • 相关阅读:
    百度ECharts数据绑定诀窍
    SQL操作Json数据
    c# 如何得到一个字符的ASCII码
    Sql数据库收缩 语句特别快
    Hive中 使用 Round() 的坑
    [转]Hive 数据类型
    [转] Hive函数大全
    使用Hive Rest API 连接HDInsight
    Hive动态分区 参数配置及语法
    Js的引用赋值与传值赋值
  • 原文地址:https://www.cnblogs.com/Applogize/p/13374475.html
Copyright © 2011-2022 走看看