阿里云ECS自建MySQL与RDS进行主从复制

本文使用版本为MySQL 5.6

1.ECS安装MySQL

采用二进制安装方式

安装目录为/usr/local/mysql

数据目录设置为/newdisk/mysql/data

详细安装方式本文略过

2.RDS配置

创建一个从库同部署数据用的账号,普通用户只读即可。指定要同步的数据库。

3.ECS自建Mysql配置

my.cnf配置如下:

[mysqld]

user=mysql                                             #用来启动mysql的用户

server_id = 2                                          #指定从库的server_id,不能与主库相同

read_only = 1                                          #设置从库为只读

port = 3307                                            #指定端口号为3307,最好不要跟主库相同

replicate-wild-ignore-table     = mysql.%              #主从复制的时候忽略

replicate-wild-ignore-table     = test.%               #主从复制的时候忽略

binlog_format   = ROW                                  #binlog的格式,ROW格式记录方式成每一行数据被修改,

slave-skip-errors = 1032,1062,1007,1050                                                       然后在slave端再对相同的数据进行修改

log-bin                  = mysql-bin                   #二进制日志,记录对数据发生变化的sql语句,以二进制方式

                                                       保存在磁盘中

log-bin-index            = mysql-bin.index             #指定索引文件,此文件指示当前使用了哪个日志文件

relay-log                = relay-log                   #中继日志,用来存放master的bin中的内容,看上方原理

relay_log_index          = relay-log.index             #指定索引文件,此文件指示当前使用哪个日志文件

 

gtid_mode=on                                           #开启GTID

enforce_gtid_consistency=on                          #只记录对基于GTID的复制安全

log-slave-updates = 1                                #允许下端接入slave

 

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES  #存储引擎采用严格模式

 

 

basedir=/usr/local/mysql/                                  #指定mysql的安装目录

datadir=/newdisk/mysql/data                              #指定mysql数据的存放目录

socket=/tmp/mysql.sock                               #指定mysql的sock文件存放目录

key_buffer_size=32M                                  #myisam索引缓冲,对myisam很重要,缓存myisam表索引数据

max_allowed_packet=8M                                #限制Server接受的数据包大小

 

[mysqldump]                                          #数据库备份

quick                                                #强制mysqldump从服务器一次一行地检索表中的行而不是

                                                     检索所有行并在输出前将它缓存到内存中

4.启动mysqld服务

启动脚本使用mysql下support-files下的mysql.server,改名mysqld复制到/etc/init.d下

可根据实际情况修改。

5.登录rds数据库查看信息

show master status;                                  #记录执行结果;

 

6.登录从数据库执行以下语句

mysql>change master to MASTER_HOST='RDS内网地址',

                       MASTER_USER='上面提到的RDS只读账户',

                       MASTER_PASSWORD='密码',

                       master_auto_position = 1;

change master to MASTER_HOST='rm-uf67i7m6ge242dt1q.mysql.rds.aliyuncs.com',

                       MASTER_USER='slave003',

                                                  master_port=3306,master_log_file='mysql-bin.000271',     master_log_pos=20313,master_auto_position = 0

;

mysql> start slave;

mysql> show slave status;(以下这两个参数显示YES则证明成功)

Slave_IO_Running:YES

Slave_SQL_Running:YES                               

 

7.同步的数据库

同步的数据库可以使用备份命令从主库获得,然后恢复到从库。

上述操作最好为生产环境已经下线,避免新数据写入导致问题。

 

8.错误处理

在从库作stop slave时报:

error:
ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.

经分析,需要:

删除5张表,并重新导入脚本
use mysql
drop table slave_master_info;
drop table slave_relay_log_info;
drop table slave_worker_info;
drop table innodb_index_stats;
drop table innodb_table_stats;
source /usr/coolpad/mysql/share/mysql_system_tables.sql

 

 

错误2:

因某原因slave服务器发生错误,重新恢复slave时发生如下错误:

Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.' 

主库操作:

show master status; 

记录如下

-- File: Mysql-bin.000014 
-- Position:231 

从库操作如下:

执行CHANGE MASTER TO MASTER_LOG_FILE='xx',MASTER_LOG_POS=xxx;

如发生如下错误: 
[Err] 1776 - Parameters MASTER_LOG_FILE, MASTER_LOG_POS, RELAY_LOG_FILE and RELAY_LOG_POS cannot be set when MASTER_AUTO_POSITION is active. 

执行如下:
change master to master_auto_position=0; 

成功后再执行:
CHANGE MASTER TO MASTER_LOG_FILE='xxx',MASTER_LOG_POS=xxx; 
最后执行

start slave; 
show slave status; 

你可能感兴趣的:(MySQL)