搭建Mysql数据库主从读写分离

原理

主服务器创建同步用户,用户向主服务器发起建立数据库aa的请求(create database aa),主服务器通过应用线程把请求转发给i/o守护线程,主服务器i/o守护线程生成数据库同时生成二进制日志bin.000001,bin.000001.index,然后主服务器主动推送二进制日志到从服务器,并唤醒从服务器的i/o守护线程和sql守护线程,从服务器i/o守护线程将日志转存为relay-bin.000001和relay-bin.000001.index,sql守护线程将日志翻译成真正的数据,完成工作后,从服务器的i/o守护线程和sql守护线程进入休眠状态,等待新的操作唤醒!

  1. 打开mysql主库的配置文件my.cnf

  1. 在主服务器master上配置开启Binary log,主要是在[mysqld]下面添加:

  1. # 服务Id,必须唯一
  2. server-id=1
  3. # 日志文件名
  4. log-bin=master-bin
  5. # 日志索引值
  6. log-bin-index=master-bin.index
  1. 重启mysql服务

  1. 检查主库配置效果

  1. SHOW MASTER STATUS;


如果显示如下,即为主库配置完成

  1. 配置从服务器my.cnf

  1. server-id=2
  2. relay-log-index=slave-relay-bin.index
  3. relay-log=slave-relay-bin

保证server-id与主库不一致,配置多个从库时,只需要改变server-id即可

  1. 重启从库mysql服务

  1. 开始配置主从库的关联

  1. 先建立一个操作主从同步的数据库用户,切换到主数据库执行
    1. create user test;
    2. GRANT REPLICATION SLAVE ON *.* TO 'test'@'从库IP地址' IDENTIFIED BY 'test';
    3. flush privileges;
    4. 配置的含义就是创建了一个数据库用户test,密码是test, 在从服务器使用test这个账号和主服务器连接的时候,就赋予其REPLICATION SLAVE的权限,表面这个权限是针对主库的所有表的
  1. 进入从数据库后执行:
    1. change master to master_host='主库IP',master_port=3306,master_user='test',master_password='test',master_log_file='master-bin.000001',master_log_pos=6485;
  1. 执行start slave启动从库
    1. start slave;
    2. 停止主从同步的命令为:
    3. stop slave
  1. 查看状态命令,\G表示换行查看
    1. show slave status \G;
  1. 此时,主从库的关联就建立好了,可以在主库创建数据库和表,观察从库是否有相应数据。

大概思路:

一主多重只需要修改从库server-id即可,其他与一主一从配置一致

参考: