mysql主从同步配置方法和原理

mysql主从复制试验环境:
    1.CentOS5.8 x86_64位 采用最小化安装,系统经过了基本优化篇
    2.mysql版本: 5.1.73-log ,同台服务器多实例,安装方法参考:mysql多实例安装方法

3.源码包存放位置:/home/oldboy/tools
    4.源码包编译安装位置:/application/
一.修改master配置
    1.修改my.cnf配置
         vi /data/3306/my.cnf
         egrep "log-bin|server-id" /data/3306/my.cnf    #检查设置成如下
            log-bin = /data/3306/mysql-bin
            server-id = 1
            #transaction_isolation = READ-COMMITTED        
            #要注释掉.不然插入数据,会报如下错误
                mysql> insert into stu values (1, ‘txidc‘),(2,‘gaogao‘);
                ERROR 1598 (HY000): Binary logging not possible. Message: Transaction level ‘READ-COMMITTED‘ in InnoDB is not safe for binlog mode ‘STATEMENT‘
        /data/3306/mysql start
        
    2.mysql主库增加用于同步用户:
        
        mysql> grant replication slave on *.* to [email protected]‘192.168.1.%‘ identified by ‘mygirl99‘
        mysql> select user,host from mysql.user;
        +------+-------------+
        | user | host        |
        +------+-------------+
        | root | 127.0.0.1   |
        | rep  | 192.168.1.% |
        | root | localhost   |
        | root | ser200      |
        +------+-------------+
        4 rows in set (0.00 sec)

mysql> show grants for [email protected]‘192.168.1.%‘;
        +--------------------------------------------------------------------------------------------------------------------------+
        | Grants for [email protected]%                                                                                               |
        +--------------------------------------------------------------------------------------------------------------------------+
        | GRANT REPLICATION SLAVE ON *.* TO ‘rep‘@‘192.168.1.%‘ IDENTIFIED BY PASSWORD ‘*3561920064C790E42F7FBEBD0303ACC7C1EF855E‘ |
        +--------------------------------------------------------------------------------------------------------------------------+
        1 row in set (0.00 sec)
    3.主库锁表只读:此时业务会受影响.生产环境要考虑.要是停机选择流量最小时间
        mysql> flush tables with read lock;
        Query OK, 0 rows affected (0.00 sec)

mysql> show variables like ‘%timeout%‘
            -> ;
        +----------------------------+-------+
        | Variable_name              | Value |
        +----------------------------+-------+
        | connect_timeout            | 10    |
        | delayed_insert_timeout     | 300   |
        | innodb_lock_wait_timeout   | 120   |
        | innodb_rollback_on_timeout | OFF   |
        | interactive_timeout        | 28800 |        #交互操时时间是28800秒
        | net_read_timeout           | 30    |
        | net_write_timeout          | 60    |
        | slave_net_timeout          | 3600  |
        | table_lock_wait_timeout    | 50    |
        | wait_timeout               | 28800 |        #连接等待时间是28800秒,这2项时间要是过短.有可能会自动解锁表
        +----------------------------+-------+
        10 rows in set (0.00 sec)
    4.查看主库的位置状态,从库里面是从此位置开始同步
        mysql> show master status;
        +------------------+----------+--------------+------------------+
        | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
        +------------------+----------+--------------+------------------+
        | mysql-bin.000008 |      832 |              |                  |
        +------------------+----------+--------------+------------------+
        1 row in set (0.00 sec)
    5.导出主库
        [[email protected] 3306]# mysqldump -uroot -p  -A -B -S /data/3306/mysql.sock |gzip >/server/bak/mysql_bak.$(date +%Y%m%d).sql.gz
        Enter password:
        -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
        [[email protected] 3306]# ll /server/bak/mysql_bak.20141029.sql.gz
        -rw-r--r-- 1 root root 144960 Oct 29 15:48 /server/bak/mysql_bak.20141029.sql.gz
        
        注意事项:
            -A:备份所有库    -B,备份时增加use db 或者drop
            如果数据库超过了100G+,备份时允许停机的话.可以直接打包数据文件迁移

6.在确认下主库的位置状态,确保导出过程,没有数据插入或者sql更新等操作
        [[email protected] 3306]# mysql -uroot -pmybaby3306 -S /data/3306/mysql.sock -e ‘show master status‘;
        +------------------+----------+--------------+------------------+
        | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
        +------------------+----------+--------------+------------------+
        | mysql-bin.000008 |      832 |              |                  |
        +------------------+----------+--------------+------------------+
    7.解锁主库,恢复业务    
        mysql> unlock tables;
        Query OK, 0 rows affected (0.00 sec)
二.从库slave操作
    1.修改从库配置:
        [[email protected] 3306]# cd /data/3307/
        [[email protected] 3307]# vi my.cnf
        [[email protected] 3307]# egrep "server-id|log-bin" my.cnf
        #log-bin = /data/3307/mysql-bin
        server-id = 2
    2.导入数据库
        [[email protected] 3307]# /data/3307/mysql start
        [[email protected] 3307]# gunzip /server/bak/mysql_bak.20141029.sql.gz
        [[email protected] 3307]# ll /server/bak/mysql_bak.20141029.sql
        -rw-r--r-- 1 root root 527860 Oct 29 15:48 /server/bak/mysql_bak.20141029.sql
        [[email protected] 3307]# mysql -uroot -pmybaby3307 -S /data/3307/mysql.sock < /server/bak/mysql_bak.20141029.sql

检查导入状态:

mysql> show databases;
        +--------------------+
        | Database           |
        +--------------------+
        | information_schema |
        | mysql              |
        | test               |
        | test3306           |
        +--------------------+
        4 rows in set (0.00 sec)
    3.登陆从库.配置从库同步参数
        change master to \
        master_host="192.168.1.200", \
        master_user="rpe", \
        master_port=3306, \
        master_password="mygirl99", \
        master_log_file="mysql-bin.000008", \
        master_log_pos=832;
    4.启动从库同步开关
        mysql> start slave;         
        Query OK, 0 rows affected (0.00 sec)

报错
        mysql> show slave status \G;
        *************************** 1. row ***************************
                   Slave_IO_State: Connecting to master
                  Master_Host: 192.168.1.200
                  Master_User: rpe
                  Master_Port: 3306
                Connect_Retry: 60
                  Master_Log_File: mysql-bin.000008
              Read_Master_Log_Pos: 832
                   Relay_Log_File: relay-bin.000001
                Relay_Log_Pos: 4
            Relay_Master_Log_File: mysql-bin.000008
                 Slave_IO_Running: No
                Slave_SQL_Running: Yes
        原因:
            主库的用户名设置错误,造成连接不上.设置对应的就OK了
        mysql> show slave status \G;
        *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.200
                  Master_User: rpe
                  Master_Port: 3306
                Connect_Retry: 60
                  Master_Log_File: mysql-bin.000008
              Read_Master_Log_Pos: 1329
                   Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 748
            Relay_Master_Log_File: mysql-bin.000008
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB:
              Replicate_Ignore_DB: mysql
               Replicate_Do_Table:
               Replicate_Ignore_Table:
              Replicate_Wild_Do_Table:
          Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
              Exec_Master_Log_Pos: 1329
                  Relay_Log_Space: 897
                  Until_Condition: None
                   Until_Log_File:
                Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File:
               Master_SSL_CA_Path:
                  Master_SSL_Cert:
                Master_SSL_Cipher:
                   Master_SSL_Key:
            Seconds_Behind_Master: 0
        Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
                   Last_SQL_Errno: 0
                   Last_SQL_Error:
        1 row in set (0.00 sec)

三.不停机实现主从库
    1,原理:备份数据库记下bin-log的文件名和位置,下次导入时,从该位置开始同步就行了.

更多的mysql安装教程请点击

时间: 2024-12-26 05:09:44

mysql主从同步配置方法和原理的相关文章

centos 5.4中mysql主从同步配置方法

安装环境•centos 5.4•mysql 5.1.xx 采用rpm直接安装•xtrabackup 1.2.22 采用rpm直接安装1. Master:/etc/my.cnf  代码如下 复制代码 [mysqld]server-id = 1log-bininnodb_flush_log_at_trx_commit=1sync_binlog=1datadir=/var/lib/mysql character-set-server=utf8init_connect='SET NAMES utf8'

企业生产MySQL主从同步配置

MySQL主从同步配置 前言:测试环境 一台mysql多个实例 主机IP地址 10.0.0.52 Master   3306 Salve    3307 一.主库要开启binlog服务 1. 1修改配置文件3306/my.cnf [[email protected] ~]# egrep "log-bin|server-id" /data/3306/my.cnf   log-bin = /data/3306/mysql-bin server-id = 1 1. 2查看主库有没有开启bin

centos下MySQL主从同步配置

centos下MySQL主从同步配置一.环境 主机: master操作系统:centos 5.3 IP:192.168.1.222 MySQL版本:5.0.77 从机: slave操作系统:centos 5.3 IP:192.168.1.220 MySQL版本:5.0.77 二.创建数据库 分别登录master机和slave机的mysql:mysql –u root –p 创建数据库:create database repl; 三.master机和slave机的相关配置 1.修改master机器

CentOS之MYSQL主从同步配置

一.主机master与salver均关闭防火墙iptables,执行service iptables stop命令: 设置SELINUX文件的SELINUX=disabled,如图所示: 二.创建数据库 分别登录master机和slave机的mysql:mysql –u root –p 创建数据库:create database repl; 在/usr/local/mysql目录下建立MYSQL复制的日志配置文件/usr/local/mysql/mysql-bin.log并赋予权限以及改变文件的

MySQL 主从同步(1) - 概念和原理介绍 以及 主从/主主模式 部署记录

Mysql复制概念Mysql内建的复制功能是构建大型高性能应用程序的基础, 将Mysql数据分布到多个系统上,这种分布机制是通过将Mysql某一台主机数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收从那时起

mysql主从同步建立方法

mysql主从同步原理: (1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events),然后通知存储引擎(I/O thread)提交事务: (2) slave将master的binary log events拷贝到它的中继日志(relay log); (3) slave重做中继日志中的事件,将改变反映它自己的数据. mysql主从操作步骤: 1.编辑matser数据库的my.cnf文件,在[mysqld]下面插入以下配置,

MySQL主从同步配置实现数据库备份

作为数据库的主要备份手段,主从同步能实现从主库(即当前使用的业务数据库)异步同步数据到从库(备份库),当主库数据库或主机出现当机不能启动时,可以通过切换到从库实现业务系统的快速恢复. 首先介绍一下我的环境,我有一个已经使用中的MySQL数据库A,然后我新装了一台MySQL数据库B作为A的从库. 一.master库A设置 先修改mysql的配置 vim /etc/my.cnf 插入下面2行 server-id=1   #这个ID是唯一的,不能和其他的主库或者从库一样 log-bin=mysql-b

Linux下MySQL主从同步配置

Centos6.5 MySQL主从同步 MySQL版本5.6.25 主服务器:centos6.5 IP:192.168.1.101 从服务器:centos6.5 IP:192.168.1.102 一.主服务器相关配置 1.创建同步账户并指定服务器地址 [[email protected] ~]mysql -uroot -p mysql>use mysql mysql>grant replication slave on *.* to 'testuser'@'192.168.1.102' ide

Mysql主从同步配置方案(Centos7)

最近在做项目高可用时,需要使用数据同步.由于只有双节点,且采用主主同步可能存在循环同步的风险,故综合考虑采用Mysql主从同步(Master-Slave同步). 可能没有接触过Mysql数据同步时,可能会觉得数据同步很难,但你按照如下操作一遍之后,会发现原来同步如此简单,毕竟我们只需要会配置,会排查问题,底层具体实现Mysql团队早帮忙实现了.废话不多说,直入话题: (1)首先,保证有两台设备(主.从),分别在两台设备上安装Mysql数据库.安装完成之后, 使用mysql -u[数据库用户名]