Linux下配置mysql数据库,实现两台机器主主热备,数据同步

学习实现两台机器实现主主热备(数据库互相同步)

说明:

​ 使用数据库:MySQL-5.1.73

​ 操作系统:CenTOS6.5 64位

​ 两台机器注意操作系统和mysql版本都要一致

环境

节点A:192.168.1.10

节点B:192.168.1.11

安装MySQL

使用yum安装,安装版本:mysql-server.x86_64

进行必要的配置

防火墙:要开启MySQL的通信端口(默认3306)

vim /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

service iptables restart

或者指令

Iptables -F#清除所有规则

节点A配置:

  • 更改配置文件:

    vi /etc/my.cnf

    在[mysqld]中增加以下配置项:

    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    
    symbolic-links=0
    
    
    ####******以下是作为主机的配置项******
    
    log-bin=mysql-bin # 配置添加日志,并设置日志文件名前缀启用二进制日志功能。这种日志的文件名是filename.n或默认的hostname.n,其中的n是一个6位数字的整数(日志文件顺序编号)。
    server-id=174 # 配置服务ID,必需唯一
    expire_logs_days= 10
    max_binlog_size= 100M
    binlog_do_db = beifen #如果需要同时同步多个数据库,请另起一行设置
    binlog_ignore_db= mysql  #忽略数据库原始数据库mysql
    binlog-do-db=information_schema #如果需要同时同步多个数据库,请另起一行设置
    replicate-do-db=information_schema #只对这个数据库进行镜像处理。
    
    
    ####********以下是作为从机的配置项**********
    
    master-host=192.168.1.11 #同步主机名或IP
    master-port=3306 #从属服务器用来连接主控服务器的TCP/IP端口
    master-user=test #从属服务器用来连接主控服务器的用户名
    master-password=abc123 #从属服务器用来连接主控服务器的密码
    read-only=0 # 0:允许从属服务器独立地执行SQL命令(默认设置); 1:从属服务器只能执行来自主控服务器的SQL命令。
    relay-log=mysqld-relay-bin
    log-slave-updates #启用从属服务器上的日志功能,使这台计算机可以用来构成一个镜像链(A->B->C)
    auto-increment-offset=2 #漂移值,也就是步长
    auto-increment-increment=1 #自增值,这两天语句是为了避免两台机器之间数据库复制时产生冲突
    lower_case_table_names=1 #是用来配置数据库名和表名的大小写的。1表示不区分大小写,0表示区分大小写。
    master-connect-retry=30 #预设重试间隔30秒
    
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
  • MASRTER配置

    1. 首先重启以下服务

      service mysqld restart

    2. 登陆到mysql

      mysql -uroot -p

    3. 创建数据库同步用户,并授予相应的权限(在这里创建一个用户,对应配置文件中的master-user,并允许能再B机器上登陆该账号)

      grant replication slave, replication client on *.* to 'test'@'192.168.1.11' identified by 'abc123';

      flush privileges;

    4. 分别运行指令,看配置对不对

      show slave status\G;

      *************************** 1. row ***************************
                    Slave_IO_State:
                       Master_Host: 192.168.1.11
                       Master_User: repl
                       Master_Port: 3306
                     Connect_Retry: 30
                   Master_Log_File: mysql-bin.000001
               Read_Master_Log_Pos: 120
                    Relay_Log_File: mysql-relay-bin.000001
                     Relay_Log_Pos: 4
             Relay_Master_Log_File: mysql-bin.000001
                  Slave_IO_Running: No
                 Slave_SQL_Running: No
                   Replicate_Do_DB:
                   #...省略其它配置

      show master status;

      +----------------------+----------+--------------+------------------+-------------------+
      | File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
      +----------------------+----------+--------------+------------------+-------------------+
      | mysql-bin.000001 |      439 | beifen             | mysql            |                   |
      +----------------------+----------+--------------+------------------+-------------------+

节点B配置:

  • 更改配置文件:

    vi /etc/my.cnf

    在[mysqld]中增加以下配置项:

    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    
    symbolic-links=0
    
    
    ####******以下是作为主机的配置项******
    
    log-bin=mysql-bin # 配置添加日志,并设置日志文件名前缀启用二进制日志功能。这种日志的文件名是filename.n或默认的hostname.n,其中的n是一个6位数字的整数(日志文件顺序编号)。
    server-id=2 # 配置服务ID,必需唯一
    expire_logs_days= 10
    max_binlog_size= 10M
    binlog_do_db = beifen #如果需要同时同步多个数据库,请另起一行设置
    binlog_ignore_db= mysql  #忽略数据库原始数据库mysql
    binlog-do-db=information_schema #如果需要同时同步多个数据库,请另起一行设置
    replicate-do-db=information_schema #只对这个数据库进行镜像处理。
    
    
    ####********以下是作为从机的配置项**********
    
    master-host=192.168.1.10 #同步主机名或IP
    master-port=3306 #从属服务器用来连接主控服务器的TCP/IP端口
    master-user=test #从属服务器用来连接主控服务器的用户名
    master-password=abc123 #从属服务器用来连接主控服务器的密码
    read-only=0 # 0:允许从属服务器独立地执行SQL命令(默认设置); 1:从属服务器只能执行来自主控服务器的SQL命令。
    relay-log=mysqld-relay-bin
    log-slave-updates #启用从属服务器上的日志功能,使这台计算机可以用来构成一个镜像链(A->B->C)
    auto-increment-offset=2 #漂移值,也就是步长
    auto-increment-increment=1 #自增值,这两天语句是为了避免两台机器之间数据库复制时产生冲突
    lower_case_table_names=1 #是用来配置数据库名和表名的大小写的。1表示不区分大小写,0表示区分大小写。
    master-connect-retry=30 #预设重试间隔30秒
    
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
  • MASRTER配置

    1. 首先重启以下服务

      service mysqld restart

    2. 登陆到mysql

      mysql -u root -p

    3. 创建数据库同步用户,并授予相应的权限(在这里创建一个用户,对应配置文件中的master-user,并允许能再B机器上登陆该账号)

      grant replication slave, replication client on *.* to 'test'@'192.168.1.10' identified by 'abc123';

      flush privileges;

    4. 分别运行指令,看配置对不对

      show slave status\G;

      *************************** 1. row ***************************
                  Slave_IO_State:
                     Master_Host: 192.168.1.10
                     Master_User: repl
                     Master_Port: 3306
                   Connect_Retry: 30
                 Master_Log_File: mysql-bin.000001
             Read_Master_Log_Pos: 120
                  Relay_Log_File: mysql-relay-bin.000001
                   Relay_Log_Pos: 4
           Relay_Master_Log_File: mysql-bin.000001
                Slave_IO_Running: No
               Slave_SQL_Running: No
                 Replicate_Do_DB:
                 #...省略其它配置

      show master status;

      +----------------------+----------+--------------+------------------+-------------------+
      | File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
      +----------------------+----------+--------------+------------------+-------------------+
      | mysql-bin.000001 |      439 | beifen             | mysql            |                   |
      +----------------------+----------+--------------+------------------+-------------------+

验证

 登录节点A创建一个数据库
shell> mysql -u root -p
mysql> create database if not exists mydb default character set utf8 collate utf8_general_ci;
mysql> create table user (id int, username varchar(30), password varchar(30));
mysql> insert into user values (1, 'shiyan', '123456');
# 下面是在B节点上的操作
#1、登录206查询所有库,是否包含mydb数据库
#2、切换到mydb库,是否包含user表,并有一条数据
#3、在206的mydb.user表插入一条数据,查看205是否同步过去
mysql> insert into user values (2,'shiyan','123456')

你可能感兴趣的:(MySQL)