首页 > 代码库 > mysql Replication(mysql5.7主从复制以及读写分离)
mysql Replication(mysql5.7主从复制以及读写分离)
Replication: 即在多个数据库服务器之间实现数据的自动复制。
策略一:基于binary log file(二进制日志文)件的方法
实现机制:
1、The master server 数据库所有的 写入、更新 操作都以“事件”的形式记录到bin log file。
2、The slave servers 从master上读取bin log file的内容,并在 slave server本地执行bin log file中记录的事件。
slave server会接收 bin log file内容的完整副本,默认执行其中记录的所有事件 [如有特别需要,可配置只执行指定的表、事件]。
每个slave server 都会持有一份包含bin log file 坐标的记录 [坐标指日志文件在master服务器上的文件名,以及日志文件中的位置]。
说明:主从复制服务群中,master和每个slave 都要设置唯一的 id,以对mysql instance 进行唯一性标识。
每一个slave server 必须配置 master server 的 主机名、日志文件坐标等数据同步所需信息!
配置实现:
1、配置 master server
1.1关闭mysql service
1.2在my.ini 配置文件添加配置信息如下:
[mysqld]
log-bin=mysql-bin #开启bin log file选项,并以mysql-bin 为日志文件前缀
server-id=1 #把 master 服务器id 设为 1
1.3重启 mysql service 即可
2、获取master server 上 bin log file 坐标
2.1登录客户端,使用命令 show master status 查看坐标文件信息
2.1.1如果没有配置master server,返回empty
2.1.2如果已经配置,要使用 “FLUSH TABLES WITH READ LOCK;” 语句来刷新表(将缓存中的数据全部刷回到数据文件)同时禁止所有的mysql 写入操作,以保证数据的完整性。
然后调用命令 show master status,将会显示 file name ,position within the file ,BinLog_Do_DB ,BinLog_Ignore_DB四项信息。
我们将四项信息记录下来,在配置 salve server 的时候,file name 和 position 是必须填写的两项信息。
3、创建主从服务器的连接用户
mysql> CREATE USER ‘repl‘@‘%.mydomain.com‘ IDENTIFIED BY ‘slavepass‘;
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl‘@‘%.mydomain.com‘;
4、配置 slave server
4.1释放读锁
UNLOCK TABLES;
4.2在my.ini文件中给slave 配置server-id
[mysqld]
server-id=2;
4.3在slave server上配置 与 master server 进行连接的必要信息
mysql> CHANGE MASTER TO
-> MASTER_HOST=‘master_host_name‘,
-> MASTER_USER=‘replication_user_name‘,
-> MASTER_PASSWORD=‘replication_password‘,
-> MASTER_LOG_FILE=‘recorded_log_file_name‘,
-> MASTER_LOG_POS=recorded_log_position;
以上配置条件: master 服务器是新建的,是一套空的数据库,不包含用户创建的数据。
如果你的数据库已经存在数据,那么slave 服务器只会同步主从配置之后的新数据。此时,配置步骤需做如下更改:
前言:如果master server存在数据,我们需要将这些数据拷贝到每一个 slave server上。
1、 为master server 创建 database snapshot (数据备份)
1.1使用mysqldump工具创建备份:
mysqldump --all-databases > dbdump.db
另外可以使用的可选项如下:
--master-data [会在备份文件中自动追加 “CHANGE MASTER TO” 语句以在slave server 上开启复制处理进程,并且不需要给master加锁]
--ignore-table [设置不进行备份 数据库的表]
--databases [设置要进行备份的数据库]
1.2使用数据库原始文件进行备份
2、在开始slave replication之前,将master备份数据 导入 slave server
1.1备份由mysqldump工具生成
1)通过使用 --skip-slave-start 选项 启动slave server ,以阻止slave开始 replication
2)import dump file : mysql < dbdump.db
1.2备份来自于原始文件
mysql Replication(mysql5.7主从复制以及读写分离)