当前位置:Gxlcms > 数据库问题 > mysql 主从复制

mysql 主从复制

时间:2021-07-01 10:21:17 帮助过:30人阅读

#################

###  mysql 主从复制  ###

#################


1、MySQL 主从复制基本工作原理 :
主服务器将改变记录记录到她的二进制日志中,从服务器将主服务器的二进制日志复制到它的中级日志中去,然后通过中级日志改变它的数据,这样就实现了主从复制。
2、Slave 的两个线程:
I/O 线程:将主服务器的二进制日志写入到中继日志中去
sql 线程:读取中继日志的内容,更新数据。


一、环境准备
主服务器:redhat6.5  IP:172.25.24.1  安装 mysql   server1
从服务器:redhat6.5  IP:172.25.24.2  安装 mysql   server2


二、配置:

1、主从服务器分别作以下操作:
1.1、版本一致

tar xf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar  

yum install -y mysql-community-libs-5.7.17-1.el6.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm mysql-community-client-5.7.17-1.el6.x86_64.rpm mysql-community-common-5.7.17-1.el6.x86_64.rpm

/etc/init.d/mysqld start

1.2、初始化表,并在后台启动 mysql

grep password /var/log/mysqld.log   ##找出mysql初始密码

mysql -p
1.3、修改 root 的密码

mysql> ALTER USER root@localhost identified by ‘Westos+007‘;
2、修改主服务器 master:
vim /etc/my.cnf

在[mysqld]下添加一下参数
log-bin=mysql-bin  #启动二进制日志系统
binlog-do-db=test  #二进制需要同步的数据库名,如果需要同步多个库,例如要再同步 westos
库,再添加一行“binlog-do-db=westos”,以此类推
server-id=1  #必须为 1 到 232–1 之间的一个正整数值
binlog-ignore-db=mysql  #禁止同步 mysql 数据库

/etc/init.d/mysqld restart   #重启mysql

mysql> GRANT REPLICATION SLAVE ON *.* TO panghu@‘172.25.24.%‘ IDENTIFIED BY ‘Westos+007‘;   #创建同步帐户,并给予权限

mysql> Flush privileges;  #刷新  

测试:

server2:

mysql -u panghu -p -h 172.25.24.1   ##登陆mysql

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+

server1:

mysql> show master status;    ##查询 master 的状态

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      601 | test         | mysql            |                   |

注:执行完此步骤后不要再操作主服务器 MYSQL,防止主服务器状态值变化

3、修改从服务器 slave:
vim /etc/my.cnf

[mysqld]
log-bin=mysql-bin  ##[不是必须]启用二进制日志
server-id=2  ##[必须]服务器唯一 ID,默认是 1,一般取IP 最后一段,从服务器 ID 号,不要和主 ID 相同,如果设置多个从服务器,每个从服务器必须有一个唯一的 server-id 值,必须与主服务器的以及其它从服务器的不相同。可以认为 server-id 值类似于 IP 地址:这些 ID 值能唯一识别复制服务器群集中的每个服务器实例。

4、在主服务器上查看master_log_pos值:

cd /var/lib/mysql/

mysqlbinlog mysql-bin.000001

5、配置从服务器 Slave:
mysql> change master to master_host=‘172.25.24.1‘, master_user=‘panghu‘, master_password=‘Westos+007‘, master_log_file=‘mysql-bin.000001‘, master_log_pos=514;    ##注意不要断开,514数字前后无单引号。
mysql> start slave;   ##启动从服务器复制功能
6、检查从服务器复制功能状态:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.25.24.1  ##主服务器地址
Master_User: panghu   ##授权帐户名,尽量避免使用
Master_Port: 3306   ##数据库端口,部分版本没有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 601  ##同步读取二进制日志的位置,大于等于 Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000002
Relay_Log_Pos: 407
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes  ##此状态必须 YES

Slave_SQL_Running: Yes  ##此状态必须 YES

......
注:Slave_IO 及 Slave_SQL 进程必须正常运行,即 YES 状态,否则都是错误的状态(如:其中一个 NO 均属错误)。
以上操作过程,主从服务器配置完成。
7、主从服务器测试:server1


主服务器 Mysql,建立数据库,并在这个库中建表插入一条数据:

mysql> create database test;
mysql> use test;
mysql> create table usertb (
    -> username varchar(15) not null,
    -> password varchar(25) not null);
mysql> desc usertb;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(15) | NO   |     | NULL    |       |
| password | varchar(25) | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
mysql> insert into usertb values (‘user1‘,‘111‘);
mysql> select * from usertb;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 111      |
+----------+----------+


从服务器 Mysql 查询:server2


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+

mysql> use test;
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| usertb         |
+----------------+

mysql> select * from usertb;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 111      |
+----------+----------+

mysql 主从复制

标签:mysql主从复制

人气教程排行