指从一个mysql主服务器master将数据复制到另一台或多台mysql从服务器slaves的过程,将主数据的DDL和DML操作通过二进制日志传到复制服务器上,然后在从服务器上对这些日志重新执行,从而使得主从服务器的数据保持同步。复制操作是异步执行,不需要持续的保持连接接收。
一、准备工作
至少两台mysql服务器,版本最好一致,主服务器master必须开启二进制日志文件
1、主服务器配置 my.cnflog_bin = /var/lib/mysql/bin_log/mysql-bin
server_id = 47
expire_logs_days = 10
max_binlog_size = 100M
binlog-do-db = geling
binlog-ignore-db = mysql
# service-id 表示服务器标识id号,master和slave主机的server-id不能一样
# binlog-do-db 表示需要复制的数据库,这里以geling数据库为例
# binlog-ignore-db 表示不需要复制的数据库2、从服务器配置 my.cnfserver_id = 48
# replicate-do-table 指定库中某表要进行复制
# replicate-ignore-table 指定库中某表不会被复制
# replicate-do-db 表示从服务器可以复制的数据库名字,如果有多个数据库,那么可以重复写多个replicate-do-db配置
# replicate-ignore-db 表示从服务器复制过程中忽略复制该配置的数据库名称3、将master的数据库复制到slave中去
二、主从复制操作步骤
1、登录主服务器master,设置一个复制使用的账户,并授予 replication slave 权限mysql> grant replication slave on *.* to 'rep1'@'192.168.160.132' identified by 'xjw1313304';2、设置主数据库master的配置文件my.cnf,开启BINLOG,并设置service-id的值。
my.cnf配置如下:[mysqld]
log_bin = /var/lib/mysql/bin_log/mysql-bin
server_id = 473、在主服务器上,设置锁定有效,这个操作为了确保没有数据库操作,以便获得一致性的快照mysql> flush tables with read lock;4、查询主服务器master上当前的二进制日志和偏移值。这个操作的目的是为了在从数据库启动以后,从这个点进行数据库的恢复。mysql> show master status;
#结果
# file : mysql-bin.000029
# position : 1095、主服务器master停止更新操作,需要生成数据库的备份,可以通过mysqldump导出数据或者使用ibbackup工具进行数据库的备份,如果主数据库停止,那么可以直接使用cp命令将数据库文件复制到从数据库服务器上。
主数据库备份完成后,主数据库恢复写操作mysql> unlock tables;6、修改从数据库的配置文件my.cnf,增加service-id参数,service-id的值必须是唯一的。[mysqld]
server_id = 487、在从服务器上,使用 --skip-slave-start 选项启动从数据库,这样不会立即启动从数据库服务上的复制进程,方便我们对从数据库的服务进行一步的配置# mysql_safe
shell> mysql_safe --skip-slave-start &8、对从数据库服务器做相应的设置,指定复制使用的用户,主数据库服务器的ip端口以及开始执行复制的日志文件和位置mysql> stop slave;
mysql> change master to
-> master_host='192.168.160.131',
-> master_user='rep1',
-> master_password='xjw1313304',
-> master_log_file='mysql-bin.00029',
-> master_log_pos=109;9、在从服务器上,启动slave线程mysql> start slave;10、在从服务器上执行 show slave status\G命令查询从服务器的状态mysql> show slave status\G;
/**
* 在信息中查看,首先查看 'Slave_IO_Running' 和 'Slave_SQL_Running',这两个进程是否是'yes'
* Slave_IO_Running 表明是否此进程能够由从服务器到主服务器正确地读取 binlog日志,并写入到从服务器的中继日志中
* Slave_SQL_Running 表明能否读取并执行中继日志中的binlog信息
**/此时也可以执行 show processlist\G命令查询从服务器的状态mysql> show processlist\G;