运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

MySQL主从介绍

运维开发网 https://www.qedev.com 2021-04-20 18:39 出处:51CTO 作者:六六天一
MySQL主从介绍MySQL主从又叫做replication,AB复制;简单讲就是A和B两个机器做主从后,在A上些数据,另外一台B也能跟着些数据,两者数据实时同步;MySQL主从是基于binlog的,主上必须开启binlog才能进行主从。应用场景:备份使用,只使用主机器,从机器备份,当主机器宕机,切换从机器正常访问;分流使用,但从机器无法写数据;主从过程大致有三个步骤:1,主将更改操作记录到bin

MySQL主从介绍

MySQL主从又叫做replication,AB复制;简单讲就是A和B两个机器做主从后,在A上些数据,另外一台B也能跟着些数据,两者数据实时同步;

MySQL主从是基于binlog的,主上必须开启binlog才能进行主从。

应用场景:备份使用,只使用主机器,从机器备份,当主机器宕机,切换从机器正常访问;分流使用,但从机器无法写数据;

主从过程大致有三个步骤:

1,主将更改操作记录到binlog里

2,从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里

3,从根据relalog里面的sql语句按顺序执行

主上有一个log dump线程,用来和从的I/O线程传递binlog

从上有两个线程,其中I/O线程用来同步主的binlog并生成relalog,另外一个SQL线程用来把relalog里面的sql语句执行

MySQL主从介绍

实验步骤为:A设置配置文件-A重启服务-A创建主从账号-锁定A的数据库写功能-备份A所有数据库-B设置配置文件-B重启服务-将A备份文件传到B机器上-B上创建与A一样的数据库并将数据恢复成一摸一样-关闭B的同步功能-B设置同步参数-B开启同步-A解锁写功能;

主MySQL配置

设置配置文件

vim /etc/my.cnf

增加

server-id=136 //增加server-id为136

log_bin=jinkai01 //设置log_bin名为jinkai01

/etc/init.d/mysqld restart //重启mysql服务

创建user01数据库,将mysql的内容复制到user01上

备份mysql数据库

mysqldump -uroot -padmin123 mysql > /tmp/mysql.sql

创建user01数据库

mysql -uroot -padmin123 -e "create database user01"

把备份的mysql数据库导入到user01数据库

mysql -uroot -padmin123 user01 < /tmp/mysql.sql

创建主从mysql账号

mysql -uroot -padmin123

创建用户repl限定为从ip登录,这里的repl是为从(slave)端设置的访问主(master)端的用户,也就是要完成主从复制的用户,其密码为[email protected],这里的192.168.111.137为slave的IP

grant replication slave on . to 'repl'@'192.168.111.137' identified by '[email protected]';

锁定数据库写功能

flush tables with read lock;

查看master的状态,这些数据是要记录的,一会要在slave端用到:

show master status;

MariaDB [(none)]> show master status;

+-----------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-----------------+----------+--------------+------------------+-------------------+

| jinkai01.000001 | 699778 | | | |

+-----------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

进入到数据库存储目录,查看有哪些数据库

cd /data/mysql/

将所有数据库备份

mysqldump -uroot -padmin123 zrlog > /tmp/zrlog.sql //将test数据库备份

mysqldump -uroot -padmin123 db1 > /tmp/db1.sql //将mysql数据库备份

mysqldump -uroot -padmin123 user01 > /tmp/user01.sql //将user01数据库备份

从MySQL配置

设置配置文件

vim /etc/my.cnf

增加一行

server-id=137

重启mysql服务

/etc/init.d/mysqld restart

将主服务器上的备份传到从机器上

scp 192.168.111.136:/tmp/*.sql /tmp/

登录mysql

mysql -uroot -p'[email protected]'

创建与主服务器相应数据库,主从数据库一致

create database user01;

create database db1;

create database zrlog;

恢复备份数据恢复到相应数据库下

mysql -uroot -p'[email protected]' db1 < /tmp/db1.sql

mysql -uroot -p'[email protected]' zrlog < /tmp/zrlog.sql

mysql -uroot -p'[email protected]' user01 < /tmp/user01.sql

关闭从服务的同步

MariaDB [(none)]> stop slave;

设置同步参数

MariaDB [(none)]> change master to

master_host='192.168.111.136',master_user='repl',master_password='[email protected]',master_log_file='jinkai01.000001',master_log_pos=699778;

注意:master_user='repl',master_password='[email protected]'都是主上面设置好的,这里的master_log_file与master_log_pos后面参数,分别是主服务器的show master status;

mysql> show master status;

+-----------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-----------------+----------+--------------+------------------+-------------------+

| jinkai01.000001 | 699778 | | | |

+-----------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

开启从服务的同步

MariaDB [(none)]> start slave;解锁主服务的写功能

登录主服务器A的mysql,解锁主服务器的写功能

MariaDB [(none)]> unlock tables;

检测

show slave status\G //只要看Slave_IO_Running与Slave_SQL_Running是否为yes

drop database db1; //主上删除db1数据库;

show databases; //从上查看数据库列表,发现db1数据库消失;

注意:如果在从服务器上操作删除了东西,那么主从配置就自动断开;需要两方数据一致后,关闭同步功能,重新指定同步参数,再打开同步才行;

其他配置

vim /etc/my.cnf

主服务器(主上配置后,从不用配置)

binlog-do-db= //仅同步指定数据库

binlog-ignore-db= //忽略指定的数据库

从服务器(从配置后,主不用配置)

replicate_do_db= //仅同步指定数据库

replicate_ignore_db= //忽略指定的数据库replicate_wild_do_table= //如test.%,支持通配符%,同步指定更新某表

replicate_wild_ignore_table= //忽略更新某表

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号