Mysql如何实现主从复制

当单台 MYSQL 服务器无法满足当前网站流量时的优化方案。需要搭建 mysql 集群技术。

MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。

复制原理:

Mysql 中有一种日志叫做 bin 日志(二进制日志)。这个日志会记录下所有修改了数据库的SQL 语句
主从复制的原理其实就是把主服务器上的二进制日志复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据就相同了。

在这里插入图片描述

主从复制配置过程:

Master:192.168.1.1
Slave: 192.168.1.2

master:

打开mysql的配置文件 vim /etc/my.cnf
#log-bin = mysql-bin 的#去掉 开启二进制日志

在配置文件在里的[mysqld]下面添加下面内容:

	log-bin=mysql-bin #二进制日志文件,master产生,slave使用进行复制操作。 
	server-id=1 #给数据库服务的唯一标识
	binlog-do-db=DB1 #复制的数据库(当该数据库有改变时,在从库中会有相对应的修改)
	binlog-do-db=DB2
	binlog-ignore-db=DB3 #不复制的数据库

1.然后重启主库: service mysqld restart
2.进入mysql: mysql -u root -p
3.赋予从库权限帐号,允许用户在主库上读取日志,赋予192.168.1.2也就是Slave机器有File权限和REPLICATION SLAVE的权限。
在master中执行以下命令:

mysql>GRANT FILE ON *.* TO 'root'@'192.168.1.2' IDENTIFIED BY 'password';  
mysql>GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.1.2' IDENTIFIED BY 'password';
mysql>FLUSH PRIVILEGES

再重启 并进入mysql 显示主库信息

mysql> show master status;

在这里插入图片描述
这里的 File 、Position 是在配置Salve的时候要使用到的(这两个数据需要记住,一会有用),Binlog_Do_DB表示要同步的数据库,Binlog_Ignore_DB 表示不复制的数据库,这些都是前面配置的时候进行指定的。

另外:如果执行这个步骤始终为Empty set(0.00 sec),那说明前面的my.cnf没配置对。

slave :

与master一致,先打开mysql的配置文件 vim /etc/my.cnf
启动中继日志
在配置文件在里的[mysqld]下面添加下面内容:

	log-bin=mysql-bin 
	server-id=2   	 #不能与主库一致
	binlog-ignore-db=DB4
	binlog-ignore-db=DB5

然后重启mysql: service mysqld restart
进入mysql: mysql -u root -p 执行以下命令来指定Master的信息:

mysql> stop slave;  #关闭Slave
mysql> change master to master_host='master的ip',master_user='root',master_password='master的密码',master_log_file='前面查出的主库信息的File', master_log_pos=主库信息的Position;
mysql> start slave;  #开启Slave

然后查看配置的信息:

mysql> show slave status \G;

Mysql如何实现主从复制_第1张图片
图中两项都是yes的话,表示主从复制配置成功

注:主库和从库要求版本一致,否则就会报错

主从复制解决的问题:

数据分布:随意停止或开始复制,并在不同地理位置分布数据备份
负载均衡:降低单个服务器的压力
高可用和故障切换:帮助应用程序避免单点失败

详情请查看:https://blog.csdn.net/daicooper/article/details/79905660

你可能感兴趣的:(数据库)