本文使用版本为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;