原理:
MySQL主要根据二进制文件进行同步;主数据库将记录写进自己的二进制文件,备数据库通过获取主数据库二进制文件并转换成SQL语句后执行,从而实现主从复制。
本人用途:
在主数据库无法停止运行进行数据备份的情况下,可以暂停备数据库,对数据进行备份操作
配置:
主机名 | IP地址 | 服务器版本 | MySQL版本 |
DB1(主) | 192.168.56.103 | RedHat 6.4 | 5.1.73 |
DB2(备) | 192.168.56.104 | RedHat 6.4 | 5.1.73 |
MySQL安装:
https://blog.csdn.net/qq_15993903/article/details/86623029
操作步骤:
1.修改MySQL配置文件my.cnf,注意在[mysqld]以下增加
[root@localhost ~]# vim /etc/my.cnf
DB1,增加以下内容
log-bin = /var/lib/mysql/mysql-bin #数据库安装路径,启动二进制文件
server-id =1 #唯一ID
log_slave_updates=1 #开启主主同步
bing-do-db=yang #待同步的数据库
![DB1的配置](https://i-blog.csdnimg.cn/blog_migrate/8e5cf860deb0ae0c2267f823ca3c20dd.png)
DB2,增加以下内容
log-bin = /var/lib/mysql/mysql-bin #数据库安装路径,启动二进制文件
server-id =2 #唯一ID(与主id区分)
log_slave_updates=1 #开启主主同步bing-do-db=yang #待同步的数据库
![](https://i-blog.csdnimg.cn/blog_migrate/4da911430c7813021249d1bae681c2fa.png)
重启数据库服务:
[root@localhost ~]# service mysqld restart
如MySQL无法启动,则检查my.cnf是否正确配置(去掉注释)
查看MySQL目录是否生成 mysql-bin.* 文件
[root@localhost ~]# cd /var/lib/mysql/
[root@localhost mysql]# ls
![](https://i-blog.csdnimg.cn/blog_migrate/c7c8dcfd399eda0c1aebb58e7ca6a9b5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ef17d1a8531c6ad9aeb08278860b751a.png)
2.创建复制用户
DB1中创建:授权来自BD2(192.168.56.104)通过mysql用户访问
[root@localhost mysql]# mysql -u root -proot
mysql> CREATE USER 'mysql'@'192.168.56.104' IDENTIFIED BY 'mysql';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'mysql'@'192.168.56.104';
DB2中创建:授权来自BD1(192.168.56.103)通过mysql用户访问
[root@localhost mysql]# mysql -u root -proot
mysql> CREATE USER 'mysql'@'192.168.56.103' IDENTIFIED BY 'mysql';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'mysql'@'192.168.56.103';
3.执行CHANGE MASTER TO语句,通过show master status确认
![](https://i-blog.csdnimg.cn/blog_migrate/b6f73599e6914c8332f8bc581e40c3df.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c9df368fe995098379a4b3ff92fdb1e4.png)
DB1执行:输入通过show master status在DB2查出的信息
CHANGE MASTER TO
MASTER_HOST='192.168.56.104',
MASTER_USER='mysql',
MASTER_PASSWORD='mysql',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=716;
![](https://i-blog.csdnimg.cn/blog_migrate/39698403bb0be759447c92490caec7ba.png)
DB2执行:输入通过show master status在DB1查出的信息
CHANGE MASTER TO
MASTER_HOST='192.168.56.103',
MASTER_USER='mysql',
MASTER_PASSWORD='mysql',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=356;
![](https://i-blog.csdnimg.cn/blog_migrate/0f5071c707de61fdf160265cffd9c046.png)
4.分别在BD1和DB2两端执行 start slave 和 show slave status\G 查看主从复制是否搭建成功
[root@localhost mysql]# service mysqld restart
[root@localhost mysql]#mysql -u root -proot
mysql> start slave;
mysql> show slave status\G
![](https://i-blog.csdnimg.cn/blog_migrate/1a70d56b78958dd552888cae6ddd9140.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f9428beca651538a92ce7d838b68b5e3.png)
出现 Slave_IO_Running: Yes Slave_SQL_Running: Yes 说明成功
5.提供以下语句进行验证
create table cs01(
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( id )
);
INSERT INTO `cs01` (`title`, `author`, `submission_date`) VALUES ('cs01', 'cs01', '2019-01-25');
![](https://i-blog.csdnimg.cn/blog_migrate/0d29c50e3162fb9db74f1e6291834583.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b46a1face6991ef8a9af1ce91dbbbf7f.png)