原理
主从复制的具体原理可以参考其他理论博客
具体步骤
- 主库和从库初同步(复制)
对于线上的mysql服务器主从配置,可以用xtrabackup复制一个初始版本(并记录当前版本包含的最后一条数据位置pos, 以后插入的数据的pos都比当前pos大),然后在从库完全拷贝这么一个初始版本(datadir目录为空);而对于未上线的mysql配置,可以直接用mysqldump一个初始版本进行同步即可。 - 主库新建可用于复制的用户
grant REPLICATION SLAVE ON *.* to repl@'192.10.13.111' identified by 'iambeautiful'
- 主库配置文件参考
[mysql]
default-character-set=utf8
[mysqld]
port = 3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
log-bin=binlog ##开启log-bin
binlog_format=mixed ##日志格式
skip_name_resolve=ON
innodb_file_per_table=ON
character_set_server=utf8
server-id=1 ##server id
binlog-do-db=jhzf_prod_db ##复制的库
binlog-ignore-db=mysql ##不复制的库
- 从库配置
[mysqld]
user=zfwg
#replication about
server_id=2
datadir=/usr/local/mysql/data
binlog-ignore-db=mysql
log-bin=binlog
binlog_format=mixed
skip_name_resolve=ON
innodb_file_per_table=ON
replicate-do-db=jhzf_prod_db
replicate-ignore-db=mysql
slave-skip-errors=1007,1008,1053,1062,1213,1158,1159
relay-log=relay-bin ##中继日志
relay-log-index=relay-bin.index
relay-log-info-file=relay-log.info
[mysql]
auto-rehash
default-character-set=utf8
- 设置从库复制主库
change master to
master_host='192.10.13.112',
master_user='repl',
master_password='iambeautiful',
master_log_file='binlog.000002',
##logfile与log_pos的获取,可在主库上 show master status(未使用库);
##或者通过xtrabackup 复制的话,为xtrabackup备份文件里的log_file与log_pos.
master_log_pos=795;
- 从库开启复制
start slave;
- 查看复制是否成功
show slave status\G;
##
Slave_IO_State: Waiting for master to send event
Master_Host: 192.10.13.112
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000002
Read_Master_Log_Pos: 1116 ##已经复制到的log_pos
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 638
Relay_Master_Log_File: binlog.000002
Slave_IO_Running: Yes ## IO和SQL都为YES时代表正常,如果不正常,可以查看mysql错误日志,进行定位。
Slave_SQL_Running: Yes
Replicate_Do_DB: jhzf_prod_db
Replicate_Ignore_DB: mysql
tips
- 主库 3306端口防火墙策略。
- 通过数据库错误日志,进行问题定位。
网友评论