mysql主从介绍,准备工作,主配置,从配置,主从测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql主从介绍,准备工作,主配置,从配置,主从测试相关的知识,希望对你有一定的参考价值。

主从介绍

  • mysql主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步。
  • MySQL主从是基于binlog的,主上须开启binlog才能进行主从。
  • 主从过程三个步骤
    • 主将更改操作记录到binlog中
    • 从将主的binlog事件(SQL语句)同步到本机并记录在relaylog中
    • 从根据relaylog里面的SQL语句按顺序执行
  • 该过程有三个线程,主上有一个logdump线程,用来和从的i/o线程传递binlog;从上有两个线程,其中i/o线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的SQL语句落地。
    技术分享图片
  • 应用环境:备份数据和分担主库数据读取压力

    准备工作

  • 准备两台机器,分别安装好mysql并启动服务,akuilinux01为主,02为从。

    配置主服务器

  • 编辑配置文件,增加两行,并重启服务
    [[email protected] src]# vim /etc/my.cnf
    server-id=130
    #自定义
    log_bin=linux1
    #指定binlog前缀
    [[email protected] src]# /etc/init.d/mysqld restart
    Shutting down MySQL... SUCCESS! 
    Starting MySQL... SUCCESS! 
  • 把mysql库备份并恢复成aming库,作为测试数据
    查看库,带akuilinux01的是新生成的。
    [[email protected] src]# ll /data/mysql/
    总用量 110688
    -rw-rw---- 1 mysql mysql      120 6月  29 09:32 akuilinux01.000001
    -rw-rw---- 1 mysql mysql    71795 6月  29 09:32 akuilinux01.err
    -rw-rw---- 1 mysql mysql       21 6月  29 09:32 akuilinux01.index
    -rw-rw---- 1 mysql mysql        5 6月  29 09:32 akuilinux01.pid
    -rw-rw---- 1 mysql mysql       56 5月  23 15:38 auto.cnf
    -rw-rw---- 1 mysql mysql 12582912 6月  29 09:32 ibdata1
    -rw-rw---- 1 mysql mysql 50331648 6月  29 09:32 ib_logfile0
    -rw-rw---- 1 mysql mysql 50331648 5月  23 15:32 ib_logfile1
    drwx------ 2 mysql mysql     4096 5月  23 15:32 mysql
    drwx------ 2 mysql mysql     4096 5月  23 15:32 performance_schema
    drwx------ 2 mysql mysql        6 5月  23 15:27 test
    drwx------ 2 mysql mysql      324 6月  27 22:52 zrlog
    备份库
    [[email protected] src]# cd /data/mysql/
    [[email protected] mysql]# mysqldump -uroot -ps5381561 mysql > /tmp/mysql.sql
    Warning: Using a password on the command line interface can be insecure.
    新建库
    [[email protected] mysql]# mysql -uroot -ps5381561 -e "create database akui"
    备份恢复到新建库
    [[email protected] mysql]# mysql -uroot -ps5381561 akui < /tmp/mysql.sql
  • 创建一个用户用作同步数据
    mysql> grant replication slave on *.* to ‘repl‘@192.168.21.129 identified by ‘password‘;
    Query OK, 0 rows affected (0.00 sec)
    #ip为从机器的ip
    mysql> flush tables with read lock;
    Query OK, 0 rows affected (0.09 sec)
    #锁定数据表(目的是暂时使其不能继续写,保持现有状态用于同步)
    mysql> show master status;
    +--------------------+----------+--------------+------------------+-------------------+
    | File               | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +--------------------+----------+--------------+------------------+-------------------+
    | akuilinux01.000001 |   660260 |              |                  |                   |
    +--------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    #记住file和position(设置主从同步时会使用)
    mysql> quit
    Bye
  • 备份主中的所有数据库,mysql中包含用户和密码的信息可以不用备份
    [email protected] ~]# cd /data/mysql/
    [[email protected] mysql]# ls
    akui                akuilinux01.index  ibdata1      mysql               zrlog
    akuilinux01.000001  akuilinux01.pid    ib_logfile0  performance_schema
    akuilinux01.err     auto.cnf           ib_logfile1  test
    [[email protected] mysql]# mysqldump -uroot -ps5381561 zrlog > /tmp/zrlog.sql
    Warning: Using a password on the command line interface can be insecure.
    [[email protected] mysql]# mysqldump -uroot -ps5381561 akui > /tmp/akui.sql
    Warning: Using a password on the command line interface can be insecure.

    配置从服务器

  • 安装mysql并启动
  • 查看my.cnf,配置server-id=131,要求和主不一样,并重启服务
    [[email protected] mysql]# vim /etc/my.cnf
    server-id=131
    [[email protected] mysql]# /etc/init.d/mysqld restart
    Shutting down MySQL.. SUCCESS! 
    Starting MySQL. SUCCESS! 
  • 同步主的备份数据到从上
    [[email protected] mysql]# scp 192.168.21.128:/tmp/*.sql /tmp/
    akui.sql                                                                            100%  644KB  15.6MB/s   00:00    
    mysql.sql                                                                           100%  644KB  26.1MB/s   00:00    
    zrlog.sql                                                                           100% 9869     1.7MB/s   00:00    
  • 创建从上的库
    [[email protected] mysql]# alias ‘mysql=/usr/local/mysql/bin/mysql‘
    [[email protected] mysql]# alias ‘mysqldump=/usr/local/mysql/bin/mysqldump‘
    [[email protected] mysql]# mysql -uroot
    mysql> create database akui
    -> ;
    Query OK, 1 row affected (0.00 sec)
    mysql> create database zrlog;
    Query OK, 1 row affected (0.00 sec)
    mysql> quit
    Bye
  • 恢复库
    [[email protected] mysql]# mysql -uroot akui < /tmp/akui.sql 
    [[email protected] mysql]# mysql -uroot zrlog < /tmp/zrlog.sql 
    保证和主上的一致
  • 主从同步
    [[email protected] mysql]# mysql -uroot 
    mysql> stop slave;
    Query OK, 0 rows affected (0.01 sec)
    mysql> change master to master_host=‘192.168.21.128‘,master_user=‘repl‘,master_password=‘password‘,master_log_file=‘akuilinux01.000001‘,master_log_pos=660260;
    #IP为主的IP;file、pos分别为主的filename和position。
    Query OK, 0 rows affected, 2 warnings (0.02 sec)
    mysql> start slave;
    Query OK, 0 rows affected (0.01 sec)
  • 从上检测是否同步成功
    mysql> show slave statusG
    Relay_Master_Log_File: akuilinux01.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            Seconds_Behind_Master: 0  //为主从延迟的时间
            Last_IO_Errno: 0
            Last_IO_Error:
            Last_SQL_Errno: 0
            Last_SQL_Error:
  • 还要解锁主库的表
    [[email protected] mysql]# mysql -urelp -ppassword
    mysql> unlock tables;
    Query OK, 0 rows affected (0.00 sec)

    几个重要的参数

  • 主服务器上/etc/my.cnf
    • binlog-do-db= //仅同步指定的库
    • binlog-ignore-db= //忽略指定库
  • 从服务器上/etc/my.cnf
    • replicate_do_db=
    • replicate_ignore_db= #这两个尽量不要用
    • replicate_do_table=
    • replicate_ignore_table= #这两个尽量不要用
    • replicate_wild_do_table= //如aming.%, 支持通配符%,代表aming这个库
    • replicate_wild_ignore_table= #尽量使用这两个,使匹配更精确

      主从测试

  • 主上
    mysql> use akui;
    Database changed
    mysql> show tables;
    +---------------------------+
    | Tables_in_akui            |
    +---------------------------+
    | columns_priv              |
    | db                        |
    | event                     |
    | func                      |
    | general_log               |
    | help_category             |
    | help_keyword              |
    | help_relation             |
    | help_topic                |
    | innodb_index_stats        |
    | innodb_table_stats        |
    | ndb_binlog_index          |
    | plugin                    |
    | proc                      |
    | procs_priv                |
    | proxies_priv              |
    | servers                   |
    | slave_master_info         |
    | slave_relay_log_info      |
    | slave_worker_info         |
    | slow_log                  |
    | tables_priv               |
    | time_zone                 |
    | time_zone_leap_second     |
    | time_zone_name            |
    | time_zone_transition      |
    | time_zone_transition_type |
    | user                      |
    +---------------------------+
    28 rows in set (0.00 sec)
    删除akui库
    mysql> drop database akui;
    Query OK, 28 rows affected (0.04 sec)
  • 从上
    删除之前
    mysql> use akui;
    Database changed
    mysql> show tables;
    +---------------------------+
    | Tables_in_akui            |
    +---------------------------+
    | columns_priv              |
    | db                        |
    | event                     |
    | func                      |
    | general_log               |
    | help_category             |
    | help_keyword              |
    | help_relation             |
    | help_topic                |
    | innodb_index_stats        |
    | innodb_table_stats        |
    | ndb_binlog_index          |
    | plugin                    |
    | proc                      |
    | procs_priv                |
    | proxies_priv              |
    | servers                   |
    | slave_master_info         |
    | slave_relay_log_info      |
    | slave_worker_info         |
    | slow_log                  |
    | tables_priv               |
    | time_zone                 |
    | time_zone_leap_second     |
    | time_zone_name            |
    | time_zone_transition      |
    | time_zone_transition_type |
    | user                      |
    +---------------------------+
    28 rows in set (0.00 sec)
    删除之后
    mysql> show tables;
    ERROR 1049 (42000): Unknown database ‘akui‘

    问题

  • 遇到主从不能正常同步,提示uuid相同的错误。这是因为克隆机器导致

以上是关于mysql主从介绍,准备工作,主配置,从配置,主从测试的主要内容,如果未能解决你的问题,请参考以下文章

MySQL主从介绍准备工作配置主配置从测试主从同步

17.1 MySQL主从介绍17.2 准备工作17.3 配置主17.4 配置从17.5 测试主从同步

17.1 MySQL主从介绍17.2 准备工作17.3 配置主17.4 配置从17.5 测试主从同步

17.1 MySQL主从介绍 17.2 准备工作 17.3 配置主 17.4 配置从 17.5 测试

17.1 MySQL主从介绍 17.2 准备工作 17.3 配置主 17.4 配置从 17.5 测试主从同步

17.1 MySQL主从介绍;17.2 准备工作;17.3 配置主;17.4 配置从;17.5 测试主从同步