Mysql_主从复制

1、在做主从复制之前,要保证主数据库与从数据库配置一样,如数据库的版本

 

2、修改主服务器master配置文件my.cnf:
   #vi /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin   //[必须]启用二进制日志
       server-id=123      //[必须]服务器唯一ID

3、修改从服务器slave的配置文件my.cnf:
   #vi /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin   //[不是必须]启用二进制日志
       server-id=234      //[必须]服务器唯一ID

4、重启两台服务器的mysql数据库

    systemctl  restart mysqld

5、在主数据库上建立帐户并授权slave:
   #/usr/local/mysql/bin/mysql -uroot -pmttang  
   mysql>GRANT REPLICATION SLAVE ON *.* to 'test'@'%' identified by 'q123456'; //一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

 

 查看主服务器的二进制日志的名称

通过使用命令行客户端连接到主服务器来启动主服务器上的会话,并通过执行以下

FLUSH TABLES WITH READ LOCK;

语句来刷新所有表和阻止写语句:

mysql> FLUSH TABLES WITH READ LOCK;

 https://dev.mysql.com/doc/refman/5.7/en/flush.html#flush-tables-with-read-lock

FLUSH [NO_WRITE_TO_BINLOG | LOCAL] {
    flush_option [, flush_option] ...
  | tables_option
}

flush_option: {
    BINARY LOGS
  | DES_KEY_FILE
  | ENGINE LOGS
  | ERROR LOGS
  | GENERAL LOGS
  | HOSTS
  | LOGS
  | PRIVILEGES
  | OPTIMIZER_COSTS
  | QUERY CACHE
  | RELAY LOGS [FOR CHANNEL channel]
  | SLOW LOGS
  | STATUS
  | USER_RESOURCES
}

tables_option: {
    TABLES
  | TABLES tbl_name [, tbl_name] ...
  | TABLES WITH READ LOCK
  | TABLES tbl_name [, tbl_name] ... WITH READ LOCK
  | TABLES tbl_name [, tbl_name] ... FOR EXPORT
}

 

 

6、登录主服务器的mysql,查询master的状态
   mysql>show master status;
   +------------------+----------+--------------+------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +------------------+----------+--------------+------------------+
   | mysql-bin.000004 |      308 |              |                  |
   +------------------+----------+--------------+------------------+
   1 row in set (0.00 sec)
   注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

7、配置从服务器Slave:
   mysql>change master to master_host='192.168.145.123,master_user='test',master_password='q123456',
         master_log_file='mysql-bin.000004',master_log_pos=308;   //注意不要断开,308数字前后无单引号。

   Mysql>start slave;    //启动从服务器复制功能

8、检查从服务器复制功能状态:

   mysql> show slave status\G

   *************************** 1. row ***************************

              Slave_IO_State: Waiting for master to send event
              Master_Host: 192.168.2.222  //主服务器地址
              Master_User: mysync   //授权帐户名,尽量避免使用root
              Master_Port: 3306    //数据库端口,部分版本没有此行
              Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
              Read_Master_Log_Pos: 600     //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
              Relay_Log_File: ddte-relay-bin.000003
              Relay_Log_Pos: 251
              Relay_Master_Log_File: mysql-bin.000004
              Slave_IO_Running: Yes    //此状态必须YES
              Slave_SQL_Running: Yes     //此状态必须YES
                    ......


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

Slave_IO_Running:yes

Slave_SQL_Running:yes

这两个线程前面有提到,是slave上参与复制过程中两个很重要的线程。YES表示正常,NO表示异常。

        Slave_IO线程主要是将master上的binlong日志内容复制到slave的中继日志中(Relay_log),一般出现问题的概率不大, 出现问题大多数是因为权限或者网络等问题,导致连接不上master。如同前面提到的那个错误。

        Slave_SQL线程负责将中继日志中的SQL执行一遍,相对来说出错的概率大些。如有人手动的在从库中插入一些记录,导致主从同步的时候出现主键冲突。

        Slave_IO_STATE:Waiting for master to send event—这个状态表示中继日志同步完成,等待master有新的事件产生。

 

posted @ 2021-01-23 11:46  菜菜920  阅读(64)  评论(0编辑  收藏  举报