正文
配置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;