Skip to content

Commit 8ea8660

Browse files
committed
68. 修改MySQL主从文件路径
1 parent b6d5ae4 commit 8ea8660

File tree

3 files changed

+163
-0
lines changed

3 files changed

+163
-0
lines changed
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
# MySQL 主从数据库
2+
3+
主从数据库的好处:
4+
5+
* 将读操作和写操作分离到不同的数据库上,避免主服务器出现性能瓶颈。
6+
* 主服务器进行写操作时,不影响查询应用服务器的查询性能,降低阻塞,提高并发。
7+
* 数据拥有多个容灾副本,提高数据安全性,同时当主服务器故障时,可立即切换到其他服务器,提高系统可用性。
8+
9+
![330611-20160919201527793-289195387](./img/330611-20160919201527793-289195387.png)
10+
11+
读写分离的基本原理就是让主数据库处理事务性 增、改、删操作(INSERT、UPDATE、DELETE)操作,而从数据库处理 SELECT 查询操作。数据库复制被用来把事务性操作导致的变更同步到其他从数据库。以 SQL 为例,主库负责写数据。读库负责读数据。每次有写库操作,同步更新到读库。写库就一个,读库可以有多个,采用日志同步的方式实现主库和多个读库的数据同步。
12+
13+
![20171206193405731.jpg](./img/20171206193405731.jpg)
14+
15+
# MySQL 主从数据库配置
16+
17+
* 数据备份,将主服务器数据备份进从服务器
18+
* 配置主从服务器,修改主从服务器配置文件
19+
* 为从服务器创建数据库账户
20+
* 开启同步
21+
22+
### 数据备份
23+
24+
语法:
25+
26+
备份
27+
28+
```
29+
mysqldump -u 账户 -p 数据库 > 数据库.sql
30+
```
31+
32+
恢复
33+
34+
```
35+
mysql -u 账户 -p
36+
CREATE DATABASE 数据库;
37+
EXIT;
38+
mysqldump -u 账户 -p 数据库 < 数据库.sql
39+
```
40+
41+
注释:数据库.sql 文件中不包含 CREATE DATABASE 的 SQL 语句,所以从服务器必须先创建好需要备份的数据库。
42+
43+
实例:
44+
45+
备份所有数据库的所有表
46+
47+
```
48+
mysqldump -u root -p --all-databases --lock-all-tables > ~/master_db.sql
49+
```
50+
51+
恢复所有数据库的所有表
52+
53+
```
54+
mysqldump -u root -p < msater_db.sql
55+
```
56+
57+
注释:备份所有数据库时。数据库.sql 文件中包含 CREATE DATABASE 的 SQL 语句,所以从服务器不必先创建好需要备份的数据库。
58+
59+
### 配置主从服务器
60+
61+
我们需要为主从服务器配置不同的 server-id,并且为主服务器配置 log_bin 文件。
62+
63+
操作:
64+
65+
* Mac
66+
67+
```
68+
vim /etc/my.cnf 或者 vim /usr/local/etc/my.cnf
69+
server-id = 1
70+
log-bin = mysql-bin
71+
72+
mysql.server restart
73+
```
74+
75+
* Ubuntu
76+
77+
```
78+
vim /etc/mysql/mysql.conf.d/mysqld.cnf
79+
server-id = 1
80+
log_bin = /var/log/mysql/mysql-bin.log
81+
82+
service mysql restart
83+
```
84+
85+
注释:
86+
87+
* 不同操作系统 MySQL 的安装路径、配置文件路径均不相同。
88+
* server-id 用于标示不同的服务器,具有唯一性,一般使用服务器的 ip 。
89+
* 从服务器无需配置 log_bin 文件。
90+
91+
### 创建数据库账户
92+
93+
语法:
94+
95+
```
96+
GRANT REPLICATION SLAVE ON 数据库 TO '账户'@'访问主机' IDENTIFIED BY '密码';
97+
FLUSH PRIVILEGES;
98+
```
99+
100+
实例:
101+
102+
```
103+
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slave';
104+
FLUSH PRIVILEGES;
105+
```
106+
107+
### 开启同步
108+
109+
语法:
110+
111+
主服务器查看日志文件
112+
113+
```
114+
SHOW MASTER STATUS;
115+
```
116+
117+
从服务器同步到主服务器
118+
119+
```
120+
CHANGE MASTER TO MASTER_HOST = '主服务器ip', MASTER_USER = '账户', MASTER_PASSWORD = '密码', MASTER_LOG_FILE = '主服务器日志文件', MASTER_LOG_POS = '主服务器日志文件';
121+
```
122+
123+
从服务器检测同步
124+
125+
```
126+
SHOW SLAVE STATUS \G;
127+
```
128+
129+
实例:
130+
131+
主服务器查看日志文件
132+
133+
```
134+
mysql -u root -p
135+
SHOW MASTER STATUS;
136+
```
137+
138+
结果集:
139+
140+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
141+
|------------------|----------|--------------|------------------|-------------------|
142+
| mysql-bin.000001 | 154 | | | |
143+
144+
从服务器检测同步
145+
146+
```
147+
mysql -u root -p
148+
CHANGE MASTER TO MASTER_HOST = '192.168.1.131', MASTER_USER = 'slave', MASTER_PASSWORD = 'slave', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = '154';
149+
```
150+
151+
从服务器检测同步
152+
153+
```
154+
mysql -u root -p
155+
SHOW SLAVE STATUS \G;
156+
```
157+
158+
当看到以下结果时,代表同步成功
159+
160+
```
161+
Slave_IO_Running:Yes
162+
Slave_SQL_Running:Yes
163+
```
60 KB
Loading
50.3 KB
Loading

0 commit comments

Comments
 (0)