mysql主从

数据库读法约定:

主库: master

从库: slave

mysql 主从同步的原理:

    #主从是异步模式,且是由从库找主库进行同步;

    1、主库开启IO线程;    开启binlog;

        #binlog记录用户的增删改

       从库开启IO线程;    开启SQL线程;

    2、主库授权从库同步的帐号密码;

    3、备份主库数据且导入从库;

    4、在从库change master to 导入用于同步主库的ip、port、user、等信息。

        CHANGE MASTER TO  
        MASTER_HOST='10.0.0.%', 
        MASTER_PORT=3306,

        MASTER_USER='rep', 
        MASTER_PASSWORD='123456', 
        MASTER_LOG_FILE='mysql-bin.000018',
        MASTER_LOG_POS=330;

    5、start slave 开启从库;

    6、从库的IO线程向主库的IO线程发起请求;

       主库的IO线程验证请求从库的账户、密码等信息是否合法;

       主库返回从库请求的数据(file 、pos);

    7、从库IO接受到主库的log日志后,将log写入中继日志relay-log;

       从库SQL线程读取relay.log转换后写入从库;

        #如果是级联,从库需记录logbin

       从库master.info记录从库跟新的位置点;

    8、从库IO线程继续向主库请求上一次位置点往下的binlog数据.....




mysql主从同步的步骤:

   1、准备两台数据库环境,或者单台多实例环境,可以正常启动和登录。


   2)、配置my.cnf文件。主库配置log-binserver-id 参数,从库配置server-idid不可以和主库及其它从库一样,从库一般不开启log-bin功能,注意重启生效,(从库在备份、级联时开启binlog);

          vi /etc/my.cnf

         49 log-bin=mysql-bin

         46 server-id = 1

         #以上两个参数要放在my.cnf中的[mysqld]模块下,否则会出错;

         查看:egrep -E "server-id|log-bin" /etc/my.cnf
               server-id = 1   

               log-bin=mysql-bin        

           生效查看:

            А、ll ../mysql/data/下是否有mysql-bin.000005日志生成;

            Β、mysql -uroot-p123456 -e "show variables like 'log_bin';"

                观察:| log_bin       | ON | 是否为ON 

         #如果从库是中继需开启binlog、开启log_slave_updates则可以写入。

 

  3)、登录主库增加用于从库连接主库同步的帐号,例如:rep授权replicattion  slave的权限;

         grant resplication slave on *.* to"rep"@"10.0.0.%" identified by "123456"

         刷新权限:

         flush privileges;

        ##replication slave为mysql同步的必须权限,此处不要授权all;

        ##*.*表示所有库所有表,可以指定具体的库和表进行复制

        ##"rep"@"10.0.0.%" rep为同步帐号。10.0.0.%为授权的网段,使用%表示整个10.0.0.0网段以rep用户访问;


4)主库登录,整库锁表;然后查看binlog的位置状态;

            flush table with read lock;

           #窗口关闭后及失效,超时参数到了也失效)

           mysql> show masterstatus;

          +------------------+----------+--------------+------------------+

           | File             | Position | Binlog_Do_DB |Binlog_Ignore_DB |

          +------------------+----------+--------------+------------------+

           | mysql-bin.000022 |      107 |              |                  |

     +------------------+----------+--------------+------------------+

          注意:flush tables with read lock  5.1

                Flush table with readlock   5.5

                mysql-bin.000022=file      107=pos

           

5)新开窗口,linux命令行备份或导出原有数据库的数据,并拷贝到从库所在的服务目录;

         mysqldump -uroot -p123456 -B -A--master-data=1 --events --single-transaction >/back/my.back

#备份,如果数据量很大,允许停机,可以停机打包,而不用mysqldump


6)、解锁主库,unlock tables;

 或者--master-data=1

7)把主库导出的原有数据恢复到从库。

8)根据主库的show master status;查看binlog的位置状态,在从库执行changemaster  to 语句;

       CHANGE MASTER TO  
        MASTER_HOST='10.0.0.8',

        #主库的ip地址;
        MASTER_PORT=3306,

        #主库mysql的端口;
        MASTER_USER='rep',

        #主库允许从库备份的帐号
        MASTER_PASSWORD='123456',

        #允许帐号的密码, 
        MASTER_LOG_FILE='mysql-bin.000018',

      #mysql-bin的位置;
        MASTER_LOG_POS=330;

 

CHANGE MASTER TO  
MASTER_HOST='10.0.0.%', 
MASTER_PORT=3306,
MASTER_USER='rep', 
MASTER_PASSWORD='123456', 
MASTER_LOG_FILE='mysql-bin.000018',
MASTER_LOG_POS=330;

 



9)从库开启同步开关:

            start slave

10)、从库检查同步状态,并在主库进行跟新操作;

         Show slave status\G;

            

          Slave_IO_Running: Yes

        Slave_SQL_Running: Yes

        为正常

 

线程的启动与关闭:

停止MYSQL同步

STOP SLAVE IO_THREAD;    #停止IO进程

STOP SLAVE SQL_THREAD;   #停止SQL进程

STOP SLAVE;              #停止IO和SQL进程

  启动MYSQL同步

START SLAVE IO_THREAD;    #启动IO进程

START SLAVE SQL_THREAD;   #启动SQL进程

 

START SLAVE;              #启动IO和SQL进程

RESET SLAVE;             #重置MYSQL同步

# 用于让从服务器忘记其在主服务器的二进制日志中的复制位置, 它会删除master.info和relay-log.info文件,以及所有的中继日志,并启动一个新的中继日志,当你不需要主从的时候可以在从上执行 这个操作。不然以后还会同步,可能会覆盖掉你的数据库,我以前就遇到过这样傻叉的事情。哈哈!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章