MySQL系列—主从复制的配置(传统方式)

来源:互联网 发布:今日赌运测试php 编辑:程序博客网 时间:2024/05/20 13:39

主从复制结构图

这里写图片描述

主从配置需要注意的地方:

  1. 主DB server和从DB server数据库的版本一致;
  2. 主DB server和从DB server数据库数据名称一致;
  3. 主DB server开启二进制日志,主DB server和从DB server的server_id都必须唯一。

配置过程主要分为两部分:

  • 主服务器配置;
  • 从服务器配置。

一、主服务器配置

1、修改my.conf文件

在[mysqld]段下添加如下内容

[root@mysql-server-01 /]# vim /etc/my.cnf#需要同步的数据库binlog-do-db=db1#不需要同步的数据库binlog-ignore-db=mysql#启用二进制日志log-bin=mysql-bin#服务器唯一ID,一般取IP最后一段server-id=54
2、启动 mysql 服务
[root@mysql-server-01 /]# service mysqld startStarting MySQL... SUCCESS! 
3、建立帐户并授权slave

建立帐户并授权

[root@mysql-server-01 /]# /usr/local/mysql/bin/mysql -uroot -p888888mysql> GRANT FILE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';Query OK, 0 rows affected (0.17 sec)mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'slave'@'%' identified by '123456'; Query OK, 0 rows affected (0.02 sec)

一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确。此处可用具体客户端IP代替,如192.168.145.226,加强安全。

刷新权限

mysql> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.01 sec)

查看mysql现在有哪些用户

mysql> select user,host from mysql.user;+-------+-----------+| user  | host      |+-------+-----------+| root  | %         || slave | %         || root  | 127.0.0.1 || root  | ::1       || root  | localhost |+-------+-----------+5 rows in set (0.01 sec)
4、查询master的状态
mysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000002 |      604 | db1          | mysql            |                   |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.01 sec)

二、从服务器配置

1、修改my.conf文件

在[mysqld]段下添加如下内容

[root@mysql-server-01 /]# vim /etc/my.cnf#服务器唯一ID,一般取IP最后一段server-id=197
2、配置从服务器
[root@mysql-server-02 ~]# service mysqld startStarting MySQL... SUCCESS! [root@mysql-server-02 ~]# /usr/local/mysql//bin/mysql -uroot -p888888mysql> change master to master_host='10.73.150.54',master_port=3306,master_user='slave',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=604;Query OK, 0 rows affected, 2 warnings (0.04 sec)

注意语句中间不要断开,master_port为mysql服务器端口号(无引号),master_user为执行同步操作的数据库账户,“604”无单引号(此处的604就是show master status 中看到的position的值,这里的mysql-bin.000002就是file对应的值)。

3、启动从服务器复制功能
mysql> start slave; Query OK, 0 rows affected (0.05 sec)
4、检查从服务器复制功能状态
mysql> show slave status\G;*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 10.73.150.54                  Master_User: slave                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000002          Read_Master_Log_Pos: 604               Relay_Log_File: mysql-server-02-relay-bin.000005                Relay_Log_Pos: 283        Relay_Master_Log_File: mysql-bin.000002             Slave_IO_Running: Yes       //此状态必须YES            Slave_SQL_Running: Yes       //此状态必须YES              Replicate_Do_DB:           Replicate_Ignore_DB:            Replicate_Do_Table:        Replicate_Ignore_Table:       Replicate_Wild_Do_Table:   Replicate_Wild_Ignore_Table: 

这里写图片描述

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

以上操作过程,从服务器配置完成。

三、测试

1、在主服务器上创建一张表:
CREATE TABLE `test_copy` (  `id` bigint(20) NOT NULL COMMENT '主键',  `title` varchar(100) NOT NULL COMMENT '标题',  PRIMARY KEY (`id`)) COMMENT='测试主从复制表';

执行后可以看到,从服务器也自动创建了一张表。

2、在主服务器上插入一条数据:
INSERT INTO test_copy(ID,TITLE) VALUES ('536563', '标题');

执行后可以看到,从服务器同样也自动插入了一条数据。

附、配置过程中的问题

1、如果出现以下错误,说说明权限不够
mysql> GRANT FILE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

赋予相应的权限。

2、如果出现此错误:Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

因为是mysql是克隆的系统所以mysql的uuid是一样的,所以需要修改。

[root@mysql-server-02 ~]# rm /data/mysql/data/auto.cnf 

此文件在相应的数据库目录下(查看 /etc/my.cnf 中的 datadir)。

解决方法:删除 /data/mysql/data/auto.cnf 文件,重新启动服务。

原创粉丝点击