linux安装MySQL主从同步(一主两从)搭建与配置

 

一、主从同步原理:

客户端访问主库,从库复制、同步主库的所有操作
单项复制时,建议将从库设置为只读

1

从库 从主机上同步数据的工作过程,如图:

1、Master,记录数据更改操作

— 启用binlog日志
— 设置binlog日志格式
— 设置server_id

2、Slave运行2个线程
— Slave_IO:复制master主机binlog日志文件里的SQL到本机的relay-log文件里
— Slave_SQL:执行本机relay-log文件里的SQL语句,重现Master的数据操作

如图:

2

二、构建思路:

构建主从同步,基本构建思路:

1、确保数据相同
– 从库必须要有主库上的数据。

2、配置主服务器
– 启用 binlog 日志及设置格式,设置 server_id, 授权用户

3、配置从服务器
– 设置 server_id ,指定主数据库服务器信息

4、测试配置
– 客户端连接主库,写入的数据,在连接从库的时候也确保数据一致。

 

三、开始搭建:

主从同步结构模式
基本应用:


— 单项复制:一主一从

1、Master服务器
– 应包括希望同步的所有库

写在主库配置文件里参数(对所有从库都有效)
binlog_do_db=库名列表 //允许同步的库
binlog_ignore_db=库名列表 //不允许同步的库

主库配置选项

3

2、Slave 服务器
– 离线导入由 Master 提供的备份
– 清空同名库

写在从库配置文件里参数(只针对从库本机有效)
replicate_do_db=库名列表 //指定只同步的库
replicate_ignore_db=库名列表 //指定不同步的库

从库配置选项

4

 

1)、主库:192.168.1.1
启用 binlog 日志及设置格式,设置 server_id

[root@mysql51 ~]# vim /etc/my.cnf
[mysqld]
server_id=11
log_bin=mysql11   //binlog日志文件名称
binlog_format="mixed"   //日志文件格式
[root@mysql51 ~]# systemctl restart mysqld
[root@mysql51 ~]# ls /var/lib/mysql/mysql11*

授权用户

[root@mysql51 ~]# mysql -hip -uroot -ppasswd -Pport
mysql> grant  replication slave on *.*  to  repluser@"%"  identified  by  "passwd";
mysql> select  host,user  from mysql.user where user='repluser';
mysql> show master status;     //查看使用的日志文件及偏移量

2)、从库:192.168.1.2

[root@mysql2 ~]# vim /etc/my.cnf
[mysqld]
server_id=2
[root@mysql2 ~]# systemctl restart mysqld
[root@mysql2 ~]# mysql -hip -uroot -ppasswd
mysql> show master status;   
mysql> change  master to master_host='192.168.4.1',    //主库ip地址
    -> master_user='repluser',       //出库授权用户名
    -> master_password='passwd',  		//授权用户密码
    -> master_log_file='mysql1.000001',		//日志文件
	-> master_log_pos=1;			//偏移文件

mysql> start slave;     	//启动salve进程
mysql> show slave status\G;    //查看slave状态
Slave_IO_Running: Yes    //IO线程状态
Slave_SQL_Running: Yes	//SQL线程状态

如果 Slave_IO_Running为NO,查看下面Last_IO_Error: Fatal error:的报错信息

[root@mysql2 mysql]# vim auto.cnf  //此配置文件查看sql数据库的uuid

从服务器相关文件

5

 

测试主从同步配置:在及客户端主机连接主机1对数据库做访问
• 在 Master 上操纵数据
– 新建 newdb 库、 newtbl 表
– 任意插入几条表记录
• 在 Slave 上查看数据更改情况
– 确认新建的 newdb 库、 newtbl 表
– 列出 newtbl 表的所有记录

 

在主库1上添加授权用户给客户端主机连接使用

 mysql> create  database db1;
 mysql> create table db1.a(id int);
 mysql> grant select,insert,update on db1.* to admin@"%" identified by "passwd";

在客户端主机连接主库服务器1,对记录做访问

[root@client0 ~]# mysql  -uroot  -h192.168.1.1  -ppasswd
 mysql> select @@hostname;
 mysql> insert into db1.a  values(111),(1231),(324);
 mysql> select * from  db1.a;

再从库服务器2本机也能查看到相同的数据为成功

 [root@mysql2 mysql]# mysql  -u root -ppasswd
 mysql> select  * from  db1.a;

 

【一主两从 同步结构配置】

把数据库服务器3 也配置为1的从数据库服务器
主库主机1 已经是主数据库服务器,无需再做配置
配置从库3
与主库数据一致(把主库数据的完全备份拷贝到本机执行恢复)

[root@mysql1 ~]# mysqldump -hip -uroot -ppasswd --single-transaction --master-data=1 --databases db1  >  /root/db1.sql
[root@mysql1 ~]# scp  db1.sql   192.168.1.3:/root/

[root@mysql3 ~]# mysql  -u root -ppasswd
mysql> create database db1;
mysql> use db1;
mysql> source  /root/db1.sql;
mysql> select * from db1.a;

[root@mysql3 ~]# vim /etc/my.cnf
[mysqld]
server_id=3
[root@mysql3 ~]# systemctl restart mysqld

检测授权用户能否连接数据库

[root@mysql3 ~]# mysql -h192.168.1.1  -urepluser  -ppasswd

数据管理员指定主库数据信息

[root@mysql3 ~]# mysql -hip -uroot -ppasswd
mysql> change master  to
	-> master_host='192.168.1.1',
	-> master_user='repluser',
	-> master_password='passwd',
	-> master_log_file='mysql1.000001',
	-> master_log_pos=1337;

master_log_pos=1337:从51主机上执行sql命令mysql> show master status;获取

查看slave程序的状态信息

mysql> start slave;
mysql> show slave status\G;
        Slave_IO_Running: Yes
        Slave_SQL_Running: Yes

测试
客户端0连接主机1写入的数据在从库2和3主机上也能查看到数据,即成功

[root@client0 ~]# mysql -hip -uadmin  -h192.168.1.1  -ppasswd
mysql> insert into db1.a values(66066);

 

从库1和2主机:登入数据库,执行mysql> select * from db1.a;查看是否有插入的数据

如果有,那么就可以了,搭建完成

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(mysql,linux,JAVA)