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文件删掉。
  • 相关阅读:
    PAT (Advanced Level) Practice 1055 The World's Richest (25 分) (结构体排序)
    PAT (Advanced Level) Practice 1036 Boys vs Girls (25 分)
    PAT (Advanced Level) Practice 1028 List Sorting (25 分) (自定义排序)
    PAT (Advanced Level) Practice 1035 Password (20 分)
    PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) (进制转换,回文数)
    PAT (Advanced Level) Practice 1120 Friend Numbers (20 分) (set)
    从零开始吧
    Python GUI编程(TKinter)(简易计算器)
    PAT 基础编程题目集 6-7 统计某类完全平方数 (20 分)
    PAT (Advanced Level) Practice 1152 Google Recruitment (20 分)
  • 原文地址:https://www.cnblogs.com/huapox/p/3516357.html
Copyright © 2011-2022 走看看