zoukankan      html  css  js  c++  java
  • mysql主从搭建和测试步骤

    2009-04-13 
     
    主从配置步骤:
     假设两台机器分别为192.168.0.202, 192.168.0.203,其中202做主,203做从。
    1. 在两台mysql上创建同步用户。202执行:
    GRANT ALL PRIVILEGES ON *.* TO 'repl'@'192.168.0.203' IDENTIFIED BY 'repl' WITH GRANT OPTION;
    203执行:
    GRANT ALL PRIVILEGES ON *.* TO 'repl'@'192.168.0.202' IDENTIFIED BY 'repl' WITH GRANT OPTION;
    让两个mysql可以互相通过repl/repl访问对方。
    2. 对两台机器,打开/etc/my.cnf mysql配置文件,在[mysqld]下打开以下选项:
    log-bin=mysql-bin
    innodb_flush_log_at_trx_commit = 1
    sync_binlog=1
    binlog-do-db=bookmark
    binlog-do-db=debate
    binlog-ignore-db=test
    binlog-ignore-db=mysql
    replicate-do-db=bookmark
    replicate-do-db=debate
    其中binlog-do-db和replicate-do-db标记出需要进行同步的数据库,对于多个数据库,重复选项多次即可,如上面的配置则表示同步bookmark和debate。binlog-ignore-db表示不
    进行同步的数据库,上面的配置表示不同步test, mysql库。
    对于主mysql(202),打开选项:
    server-id=1
    对于203,从mysql,打开选项
    server-id=2
    注意server-id选项必须打开,并且集群中每个mysql都要有一个单独的值,不能重复。一般设置主为1,从为2, 3, 4....。手册上说只要不相同什么整数都没有关系,可以设置为IP的值,如:202,
    203.
    3. 重新启动两个mysql. 分别输入:show master status; 命令,此时应该显示:
    +------------------+----------+-----------------+------------------+
    | File             | Position | Binlog_Do_DB    | Binlog_Ignore_DB |
    +------------------+----------+-----------------+------------------+
    | mysql-bin.000006 |       98 | bookmark,debate | test,mysql       |
    +------------------+----------+-----------------+------------------+
     
    1 row in set (0.00 sec)
    输入:show slave status; 命令,应该显示:
    Empty set (0.00 sec)
    表示还没有从。
    4. 为了避免风险,主mysql现在最好不要对外提供服务,就是说主mysql的已有数据不要在动了。主mysql(202), 执行下面的命令:
    FLUSH TABLES WITH READ LOCK;
    锁定表,这个时候所有的commit都会失败。
    执行:show master status;
    把输出结果记录下来,尤其是那个File和Position的值,后面要用。这里就是:mysql-bin.000006和98
    把2个mysql都停掉,命令:./mysqladmin -u root shutdown
    现在把master mysql(202)的数据复制到203上,让slave的数据和master的同步。例如用sftp把202 data目录的bookmark, debate复制到203的data目录内。两边一定要保持一致。
    5. 启动slave mysql(203),执行命令:
    CHANGE MASTER to MASTER_HOST='192.168.0.202', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=98
    其中master_host就是主mysql, master_log_file, master_log_pos为上一步在master端执行show master status; 获得的File和Position值,此处换成那些值。注意数字是没有单
    引号引起来的。如果上面一步File和Position没有值,master_log_file='', master_log_pos=4
    然后执行: start slave;
    6. 启动master mysql(202).
    在master端执行:unlock tables; 解除第4步的锁表。
    在slave端执行:show slave status \G ; 察看Slave_IO_State,一般应该为"Waiting for master to send event";此时Slave_IO_Running和Slave_SQL_Running应该为true,
    如果不是,在slave端执行: stop slave; start slave; 重启复制进程。Replicate_Do_DB为要复制的数据库,和my.cnf配置的相同。
    在master端执行: show master status; 对比File, Position的值和上面slave端的Master_Log_File,Read_Master_Log_Pos,两边相同则表示搭建完成。
    7. 测试集群正确。
      1). 在master端创建一个数据库abc,然后察看slave端是否同步创建了。
      2). 在abc插入几条记录,察看slave端数据是否同步插入。
      3). 更新abc的记录,察看slave端数据是否同步
      4). 删除abc的记录,察看slave端数据是否同步
      5). 停掉slave服务器,重新执行2,3,4的内容,重启slave,看slave端数据是否同步。
     
      在执行上面的操作过程中,每执行一次都用第6步的方法察看master的File, Position值和slave的Master_Log_File,Read_Master_Log_Pos是否相同,如果主从工作正常,这
    两个值在一次同步完成以后(slave status的Slave_IO_State显示:Waiting for master to send event)将会完全相同。
    8. 日志检查 
      如果有错误,检查mysql data目录的 ...machinname.err 文件。
    9. 应用切换到slave
     如果master mysql坏掉了,需要将应用转移到slave段。首先在slave端执行:show master status; 把输出保存下来,然后再把应用切换过去。保存输出的File和Position值将可以用于以后从slave恢复master.
     具体从slave恢复master的办法:
     在master端执行:
    CHANGE MASTER to MASTER_HOST='192.168.0.203', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=98 ;
    其中 MASTER_HOST 为slave的ip, MASTER_LOG_FILE, MASTER_LOG_POS为切换到slave时记录下的File和Position值。
    在master执行:start slave;
    待master内容基本恢复以后(在master执行:show slave status \G; Slave_IO_State显示为Waiting for master to send event)
    将应用切换回master。
    待系统稳定后master执行:stop slave停止slave。如果要避免master重启以后自动开启slave,可以将master mysql的data文件夹的master.info文件删掉。
  • 相关阅读:
    ubuntu 安装 systemback
    嵌入式gdb远程调试
    pecl 安装 phpredis
    Linux服务器内存池技术是如何实现的
    统一登录的几种常用设计模式
    数据库并发控制
    抽取一部分服务端做BFF(Backend For Frontend服务于前端的后端)
    干货 | 质量保障新手段,携程回归测试平台实践 原创 Sedro 携程技术 2021-01-21
    服务端绘图
    中间件技术在百度云原生测试中的应用实践 原创 路由器 百度智能化测试 今天
  • 原文地址:https://www.cnblogs.com/huapox/p/3516357.html
Copyright © 2011-2022 走看看