mysql的主从复制广泛用于数据库备份、故障转移、数据分析等场合。
mysql主从复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。从服务器从主服务器接收已经记录到其二进制日志的更新,当一个从服务器连接主服务器时,主服务器从日志中读取最后一次成功更新的位置,从服务器接收从那时起发生的更新,并在本机上执行相同的更新,然后等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
测试环境
master: 192.168.10.201
slave: 192.168.10.202
端口: 3306
数据库:test2
安装mysql
yum install mariadb mariadb-server
systemctl enable mariadb
service mariadb start
mysqladmin -u root password abc@def
主服务器配置
主服务器配置文件/etc/my.cnf
[mysqld]
server-id=1
binlog-do-db=test2
relay-log=/var/lib/mysql/mysql-relay-bin
relay-log-index=/var/lib/mysql/mysql-relay-bin.index
log-error=/var/lib/mysql/mysql.err
master-info-file=/var/lib/mysql/mysql-master.info
relay-log-info-file=/var/lib/mysql/mysql-relay-log.info
log-bin=/var/lib/mysql/mysql-bin
重启mysql
service mariadb restart
赋予replication slave权限
mysql -uroot -p
grant replication slave on . to 'slave_user'@'%' identified by 'password';
flush privileges;
flush tables with read lock;
show master status;
file
position
binlog_do_db
binlog_ignore_db
mysql-bin.000002
469
test2
1 row in set (0.00 sec)
注意:记下红色部分,稍后还会用到。
备份数据库
为了备份数据库,需要为数据库中所有表叫上“只读锁” (read lock),再进行dump备份:
mysqldump -u root -p --all-databases --master-data > /root/dbdump.db
备份完成后,可以用以下命令解锁:
unlock tables;
从服务器配置
还原数据库
mysql -u root -p < /root/dbdump.db
从服务器配置文件/etc/my.cnf
server-id=2
replicate-do-db=test2
连接主服务器
stop slave;
change master to master_host='192.168.10.201', master_user='slave_user', master_password='password', master_log_file='mysql-bin.000002', master_log_pos=469;
start slave;
show slave statusg
1. row **
replicate_wild_ignore_table:
master_ssl_verify_server_cert: no
replicate_ignore_server_ids:
验证
主服务器
drop test2;
create database test2;
use test2;
create table emp (c int);
insert into emp (c) values (10);