mysql 命令行 主从复制_mysql主从复制

一、mysql异步同步

怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下:

c8871cddf07da2315e90d05c21ec04e0.png

1、主从服务器分别作以下操作版本一致

初始化表,并在后台启动mysql

修改root的密码

master:192.168.0.21

slave  :192.168.0.211

slave数据库的版本不可以比master数据库的版本高

2、修改主服务器master#vim /etc/my.cnf

[mysqld]

log-bin=master-bin               #[必须]启用二进制日志

log-bin-index=master-bin.index   #二进制日志索引

server-id=1                      #[必须]服务器唯一ID,默认是1,一般取IP最后一段

innodb_file_per_table=1          #innodb分表

3、修改从服务器slave#vim /etc/my.cnf

[mysqld]

relay-log=slave-bin               #[必须]启用二进制日志

relay-log-index=salve-bin.index   #中继日志索引

read-only=YES                     #数据库只读

server-id=2                       #[必须]服务器唯一ID,默认是1,一般取IP最后一段

innodb_file_per_table=1           #innodb分表

4、重启两台服务器的mysql/etc/init.d/mysql restart

5、在主服务器上建立帐户并授权slavemysql>GRANT REPLICATION SLAVE ON *.* to 'mysync'@'192.168.0.211' identified by 'q123456'; #一般不用root帐号

mysql>flush privileges;

6、登录主服务器的mysql,查询master的状态mysql>show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mater-bin.000004 |      308 |              |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

7、配置从服务器Slave#注意不要断开,“308”无单引号。

mysql>change master to master_host='192.168.0.21',master_user='mysync',master_password='q123456',

master_log_file='master-bin.,000004',master_log_pos=308;

mysql>flush privileges;              #刷新权限;

show variables like '';              #查看数据库配置信息;

mysql>start slave;                   #启动从服务器复制功能

mysql> START SLAVE IO_Thread;        #可以开启关闭

mysql> START SLAVE SQL_Thread;       #可以开启关闭

8、检查从服务器复制功能状态:mysql> show slave status\G

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

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.0.21    #主服务器地址

Master_User: myrync          #授权帐户名,尽量避免使用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及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

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

9、如果出现Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

在master那边,执行:mysql>flush logs;

mysql>show master status;

记下File, Position。

在slave端,执行:mysql>CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000008',MASTER_LOG_POS=107;

mysql>slave start;

mysql>show slave status \G

一切正常。

二、mysql半同步设置

在Master和Slave的mysql命令行运行如下代码:# On Master

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;

# On Slave

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;

mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;

在Master和Slave的my.cnf中编辑:# On Master

[mysqld]

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000 # 1 second

# On Slave

[mysqld]

rpl_semi_sync_slave_enabled=1

也可通过设置全局变量的方式来设置,如下:set global rpl_semi_sync_master_enabled=1

取消加载插件mysql> UNINSTALL PLUGIN rpl_semi_sync_master;

==============================================

查看从服务器上的semi_sync是否开启:mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';

查看主服务器上的semi_sync是否开启,slave需要重启一下io_thread,注意clients 变为1 ,证明主从半同步复制连接成功:mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';

三、双主同步复制设置

1、在两台服务器上各自建立一个具有复制权限的用户#server1

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.1.211' IDENTIFIED BY 'slave';

#server2

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'192.168.1.21' IDENTIFIED BY 'slave';

2、修改配置文件# 主服务器上

[mysqld]

server-id = 10

log-bin = mysql-bin

relay-log = relay-mysql

relay-log-index = relay-mysql.index

auto-increment-increment = 2

auto-increment-offset = 1

# 从服务器上

[mysqld]

server-id = 20

log-bin = mysql-bin

relay-log = relay-mysql

relay-log-index = relay-mysql.index

auto-increment-increment = 2

auto-increment-offset = 2

3、如果此时两台服务器均为新建立,且无其它写入操作,各服务器只需记录当前自己二进制日志文件及事件位置,以之作为另外的服务器复制起始位置即可。#server1

mysql> SHOW MASTER STATUS\G

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

File: mysql-bin.000001

Position: 710

Binlog_Do_DB:

Binlog_Ignore_DB:

1 row in set (0.00 sec)

#server2

mysql> SHOW MASTER STATUS\G

mysql> SHOW MASTER STATUS\G

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

File: mysql-bin.000003

Position: 811

Binlog_Do_DB:

Binlog_Ignore_DB:

1 row in set (0.00 sec)

4、各服务器接下来指定对另一台服务器为自己的主服务器即可#server1

mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=811;

#server2

mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=710;

四、基于GTID的mysql复制

MySQL 5.6引入的GTID(Global Transaction IDs)使得其复制功能的配置、监控及管理变得更加易于实现,且更加健壮。

要在MySQL 5.6中使用复制功能,其服务配置段[mysqld]中于少应该定义如下选项:binlog-format:二进制日志的格式,有row、statement和mixed几种类型;

需要注意的是:当设置隔离级别为READ-COMMITED必须设置二进制日志格式为ROW,现在MySQL官方认为STATEMENT这个已经不再适合继续使用;但mixed类型在默认的事务隔离级别下,可能会导致主从数据不一致;log-slave-updates、gtid-mode、enforce-gtid-consistency、report-port和report-host:用于启动GTID及满足附属的其它需求;

master-info-repository和relay-log-info-repository:启用此两项,可用于实现在崩溃时保证二进制及从服务器安全的功能;

sync-master-info:启用之可确保无信息丢失;

slave-paralles-workers:设定从服务器的SQL线程数;0表示关闭多线程复制功能;

binlog-checksum、master-verify-checksum和slave-sql-verify-checksum:启用复制有关的所有校验功能;

binlog-rows-query-log-events:启用之可用于在二进制日志记录事件相关的信息,可降低故障排除的复杂度;

log-bin:启用二进制日志,这是保证复制功能的基本前提;

server-id:同一个复制拓扑中的所有服务器的id号必须惟一;

1、配置主从节点的服务配置文件

1.1、配置master节点[mysqld]

binlog-format=ROW

log-bin=master-bin

log-slave-updates=true

gtid-mode=on

enforce-gtid-consistency=true

master-info-repository=TABLE

relay-log-info-repository=TABLE

sync-master-info=1

slave-parallel-workers=2

binlog-checksum=CRC32

master-verify-checksum=1

slave-sql-verify-checksum=1

binlog-rows-query-log_events=1

server-id=1

report-port=3306

port=3306

datadir=/mydata/data

socket=/tmp/mysql.sock

report-host=192.168.1.21

1.2、配置slave节点[mysqld]

binlog-format=ROW

log-slave-updates=true

gtid-mode=on

enforce-gtid-consistency=true

master-info-repository=TABLE

relay-log-info-repository=TABLE

sync-master-info=1

slave-parallel-workers=2

binlog-checksum=CRC32

master-verify-checksum=1

slave-sql-verify-checksum=1

binlog-rows-query-log_events=1

server-id=11

report-port=3306

port=3306

log-bin=mysql-bin.log

datadir=/mydata/data

socket=/tmp/mysql.sock

report-host=192.168.1.211

2、创建复制用户mysql> GRANT REPLICATION SLAVE ON *.* TO slave@192.168.1.211 IDENTIFIED BY 'slave';

说明:192.168.1.211是从节点服务器;如果想一次性授权更多的节点,可以自行根据需要修改;

3、为备节点提供初始数据集

锁定主表,备份主节点上的数据,将其还原至从节点;如果没有启用GTID,在备份时需要在master上使用show master status命令查看二进制日志文件名称及事件位置,以便后面启动slave节点时使用。

4、启动从节点的复制线程

如果启用了GTID功能,则使用如下命令:mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.21', MASTER_USER='slave', MASTER_PASSWORD='slave',

MASTER_AUTO_POSITION=1

;

没启用GTID,需要使用如下命令:slave> CHANGE MASTER TO MASTER_HOST='192.168.1.21',

-> MASTER_USER='slave',

-> MASTER_PASSWORD='slave',

-> MASTER_LOG_FILE='master-bin.000003',

-> MASTER_LOG_POS=1174;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值