MySQL 主从同步之传统同步


MySQL 主从同步之传统同步


正文

配置Master

参数配置

将服务器配置成Master,要确保该服务器有一个活动的二进制日志。和唯一的服务器ID。服务器ID在一个复制集群中需要保证唯一, 建议使用IP的后三段做成的数字。为了保证复制的正确性强烈建议binlog的模式设置成row。一个最简单的复制参数需要的参数设置如下:

[mysqld]
server-id = 16876155
user = mysql
port = 3306
socket = /data/mysql/3306/mysql3306.sock
pid-file = /data/mysql/3306/mysql3306.pid
datadir = /data/mysql/3306
log_bin = /data/mysql/3306/mysql-bin
binlog_format = ROW

server_id 为MySQL实例唯一的ID,所以如果一个Slave连接了Master,并且其server-id与Master相同,则会产生Master和Slave相同的错误。

log_bin 给出了二进制日志产生的所有文件基本名。严格说,可以不需要为log_bin提供值,其默认值为hostname-bin, 但如果管理员后续修改了主机名,binlog文件名也会发生变化,容易混乱。强烈建议设置基本名。

binlog_format 复制模式有三种,即基于语句、基于行、混合模式。强烈建议使用row模式。其它模式可能会造成主从数据的不一致。

账号创建

需要在Master上创建一个用于复制的账号,命令如下:

mysql> create user rep@'%' identified by 'password';
mysql> grant replication slave on *.* to rep@'%';

配置Slave

将服务器配置成Slave,同样需要配置一个服务器ID即server_id,这个ID不能与Master相同, 建议全局唯一。同时需要配置relay-log,与log_bin一样,其默认值为hostname-relay-bin, 但如果管理员后续修改了主机名,容易混乱。强烈建议设置基本名。一个简单的配置文件如下:

[mysqld]
server-id = 16876156
user = mysql
port = 3306
socket = /data/mysql/3306/mysql3306.sock
pid-file = /data/mysql/3306/mysql3306.pid
datadir = /data/mysql/3306
relay_log = /data/mysql/3306/mysql-relay

备份和还原

远程备份

# mysqldump -uroot -p -hxx.xx.xx.xx -P3306 --opt --single-transaction --default-character-set=utf8mb4 --master-data=2 --all-databases > /data/mysql_bak/fullbackup.sql 2>>/data/mysql_bak/mysql_backup.log

从库还原

# mysql -udbaadmin  -p -hxx.xx.xx.xx -P3306 </data/mysql_bak/fullbackup.sql

连接Master和Slave

mysql> change master to
    -> master_host='xx.xx.xx.xx',
    -> master_user='rep_user',
    -> master_password='*****',
    -> master_log_file='mysql-bin.000004',
    -> master_log_pos=7740;
mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: xx.xx.xx.xx
                  Master_User: rep_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 7740
               Relay_Log_File: mysql-relay.000001
                Relay_Log_Pos: 2850
        Relay_Master_Log_File: mysql-bin.000038
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

将Slave指向Master,让他知道从哪里复制,为此你需要知道Master的基本信息如下

主机名
端口号
Master上拥有复制权限的账号
账号密码
binlog文件
binlog位移点

复制文件和位移点可通过备份文件查看,在备份文件的前部,如类似以下语句。

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000340', MASTER_LOG_POS=1066061306;






参考资料


返回