mysql读写分离(二)-----主从复制


环境:

centos:5.7

mysql:percona-server-5.6.23-72.1



操作步骤:

主库(自己选定一个mysql为主库):



登录主服务器的mysql,建立帐户并授权slave:
建立一个专门用于同步的mysql账号和密码
*grant用法
           grant 权限 on 数据库.* to 用户名@'登录主机' identified by '密码'
权限:
    常用总结, ALL/ALTER/CREATE/DROP/SELECT/UPDATE/DELETE
数据库:
     *.*                    表示所有库的所有表
     test.*                表示test库的所有表
     test.test_table  表示test库的test_table表    
用户名:
     mysql账户名
登陆主机:
     允许登陆mysql server的客户端ip
     '%'表示所有ip
     'localhost' 表示本机
     '192.168.10.2' 特定IP
密码:
      账户对应的登陆密码

*例子
mysql>grant all  on test.* to lionbule@'%' identified by 'hello1234';


GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456'; //一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安 全。


flush privileges;



查询master的状态

记录binlog的文件名和位置,开启binlog是在my.cnf配置文件中进行配置的,
binlog_format=MIXED  #设置 binlog 的格式为 MIXED
log-bin = /data/3306/mysql-bin

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



配置从服务器Slave:

这里边的master_host指的是mysql主节点的ip地址,同步的时候记得要关闭防火墙,不然容易失败
master_user,master_password是在上个步骤建立的专门用于同步的账户用户名和密码
master_port指的是mysql主节点的端口号
master_log_file,master_log_pos,这两个配置是上一步通过show master status来查询到的

change master to master_host='192.168.0.201',master_user='mysync',master_port=3307,master_password='q123456',master_log_file='mysql-bin.000001',master_log_pos=120;   //注意不要断开,“120”无单引号。

上一步sql执行成功以后, 开启从节点功能

start slave;    //启动从服务器复制功能

查看从节点状态:


show slave status\G

两个都是yes表示正常:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes



mysql主从复制原理





该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
       下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
       SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
        此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值