zoukankan      html  css  js  c++  java
  • mysql主从数据库复制 东师理想

    原创文章,请尊重作者辛勤劳动。

    运行环境:

    l  虚拟机模仿四台CentOS6.3服务器

    l  主数据库master1 :192.168.88.21

    l  从数据库slave1 :192.168.88.22

    l  从数据库slave2 :192.168.88.23

    l  从数据库slave3 :192.168.88.24

    l  Mysql5.5.28

    具体实现方法:

    1. 在之前的文档,我们已经实现了CentOS服务器安装mysql数据库,接下来我们要实现的是数据库的主从复制,也就是将我们流程2 的示意图实现;
    2. 简单来说,实现复制分为3个步骤:
      1. 配置一台服务器作为主数据库Master
      2. 配置三台服务器作为从数据库Slave
      3. 将Slave连接到Master
    3. 配置Master:要确保该服务器有一个活动的二进制日志和唯一的服务器ID。我们后面再仔细研究二进制日志,现在只要知道二进制日志保存了Master上的所有改变,并且可以在Slave上重新执行即可。服务器ID用来区分服务器。要创建二进制日志和服务器ID,需要停掉服务器,然后将log-bin,log-bin-index和server-id选项添加到my.cnf配置文件。

    [root@master1 ~]# vi /etc/my.cnf  添加红框内数据

    注:server-id = 1 是mysql数据库默认存在的服务器ID配置,单个服务器不要重复配置。没给服务器都有一个唯一的服务器ID,如果一个Slave连接了Master,并且其server-id的参数值与Master相同,则会产生Master和Slave服务器ID相同的错误。

    注:配置文件中存在service-id和log-bin的原配置参数,一定要注释或删除它。

    log-bin选项给出了二进制日志产生的所有文件的基本名。如果你创建了一个以log-bin为扩展名的文件名,该扩展名将被忽略,而只使用文件的基本名。

    注:严格的说,不需要为log-bin选项提供值,其默认值是hostname-bin。Hostname的值来自pid-file选项,默认值是主机名(可以通过gethostname(2)系统调用得到)。如果管理员后来修改了主机名,binlog文件名也会随之改变,但是索引文件仍可以获取正确的值。最好为服务器创建一个机器无关的唯一的服务器名,因为一系列binlog文件中途改名可能会很混乱。

    log-bin-index选项给出了二进制索引文件的文件名,这个索引文件保存了所有binlog文件的列表。

    注:如果没有为log-bin-index赋予任何值,其默认值与binlog文件的基本名相同(如果没有为log-bin提供值,其默认值为hostname-bin)。也就是说,如果你不赋值给log-bin-index,索引文件名会随主机名的改变而改变。所以,如果你改变主机名然后重启服务器,将找不到索引文件,从而认为索引文件不存在,导致二进制日志为空。

    binlog-do-db为需要复制数据库,如果存在多个只需要依次每行填写即可。

      4. 修改Master的配置文件以后,重启Master

    [root@master1 ~]# service mysqld restart

      5. Slave启动一个标准的客户端连接到Master,并请求Master将所有的改动转存储给它。Slave连接时要求Master上有一个特殊复制权限的用户。

    #Master服务器:进入mysql数据库

    [root@master1 ~]# /usr/local/mysql/bin/mysql -u root -p123456

    #Master服务器:创建一个复制用户并赋予复制权限,用户名为”replication”,运行从”192.168.88.*”IP来源数据,方便以后配置其他Slave服务器。

    mysql> GRANT REPLICATION SLAVE,FILE ON *.* TO 'replication'@'192.168.88.%' IDENTIFIED BY '123456';

    注:设置权限账号时不要将密码设置过于简单

      6. 查看主数据库验证是否授权成功

    #主服务器

    mysql> select user,host,password from mysql.user;

      7. 锁主库表

    mysql> flush tables with read lock;

      8. 显示主库信息。记录file和position信息,从库同步的时候用的到

    mysql> show master status;

    mysql> quit;

      9. 主库用mysqldump备份zf_db整个库

    [root@master1 ~]# /usr/local/mysql/bin/mysqldump -u root -p123456 zf_db > 20121218.sql

      10. 从库从主库拷贝备份文件,存放到/root文件夹下(自己定义),第一次需要选择yes和输入主库密码

    [root@slave2 ~]# rsync -acvz 192.168.88.21:20121218.sql /root

      11. 登录从库,建立zf_db数据库

    [root@slave2 ~]# /usr/local/mysql/bin/mysql -u root -p123456

    mysql> create database zf_db;

    mysql> quit;

      12. 将20121218.sql文件导入到zf_db库,后面/root为从数据库拷贝过来sql文件位置

    [root@slave2 ~]# /usr/local/mysql/bin/mysql -u root -p123456 zf_db < /root/20121218.sql

      13. 解锁主库表

    #主数据库

    [root@master1 ~]# /usr/local/mysql/bin/mysql -u root -p123456

    mysql> unlock tables;

      14. 配置Slave:与Master一样,需要为每个Slave分配一个唯一的服务器ID。考虑使用relay-log和relay-log-index选项向my.cnf文件添加中继日志文件(relay log file)的文件名。

    #编辑其他3台slave服务器的my.cnf,

    [root@slave1 ~]# vi /etc/my.cnf

    注:与log-bin和log-bin-index选项一样,relay-log和relay-log-index选项的默认值取决于hostname。Relay-log默认值是hostname-relay-bin,relay-log-index的默认值是hostname-relay-bin.index。使用默认值有个问题,即一旦服务器的主机名改变,会因为无法找到中继日志索引文件而认为中继日志文件为空。

      15. 配置完成后,重启slave2从服务器

    [root@slave2 ~]# service mysqld restart

      16. 登录从库并且设置同步

    [root@slave2 ~]# /usr/local/mysql/bin/mysql -u root -p123456

    必须先停止从库的复制操作

    mysql> stop slave;

    赋予复制权限,数值为主库显示数值,参看第八步

    注:MASTER_HOST为主服务器的IP地址,MASTER_USER和MASTER_PASSWORD为我们之前在主服务器创建的用户和密码,MASTER_LOG_FILE和MASTER_LOG_POS为我们之前在主服务器查看”db.sql”文件的信息。

    mysql> change master to master_host='192.168.88.21',master_user='replication',master_password='123456',master_log_file='master1-bin.000003', master_log_pos=107;

    mysql> start slave;

      17. 查看从数据库复制状态,均为Yes说明配置成功!

    mysql> show slave status\G;

      18. 复制测试

    #在主库增加一条数据,在从库查看是否复制

    mysql> use zf_db;

    mysql> insert into text_tb values ('congratulation');

    mysql> select * from text_tb;

    #从库查看数据是否复制

    mysql> use zf_db;

    mysql> select * from text_tb;

    O   YES   配置成功!

  • 相关阅读:
    使用 v-cloak 防止页面加载时出现 vuejs 的变量名
    Jackson 解析json数据之忽略解析字段注解@JsonIgnoreProperties
    java.lang.IllegalStateException: Cannot run without an instance id.
    沪牌-上海牌照-拍牌经验分享: 我是如何三次拍中的?
    沪牌学院-沪拍拍课堂4: 实拍前的演练
    沪牌学院-沪拍拍课堂3: 网络优化
    沪牌学院-沪拍拍课堂2: 出价策略
    沪牌学院-沪拍拍课堂1: 估价策略
    如何将 DVD 转成 ISO
    雅虎天气-城市代码列表
  • 原文地址:https://www.cnblogs.com/cczhoufeng/p/2827393.html
Copyright © 2011-2022 走看看