|
| 1 | +# MySQL 主从数据库 |
| 2 | + |
| 3 | +主从数据库的好处: |
| 4 | + |
| 5 | +* 将读操作和写操作分离到不同的数据库上,避免主服务器出现性能瓶颈。 |
| 6 | +* 主服务器进行写操作时,不影响查询应用服务器的查询性能,降低阻塞,提高并发。 |
| 7 | +* 数据拥有多个容灾副本,提高数据安全性,同时当主服务器故障时,可立即切换到其他服务器,提高系统可用性。 |
| 8 | + |
| 9 | + |
| 10 | + |
| 11 | +读写分离的基本原理就是让主数据库处理事务性 增、改、删操作(INSERT、UPDATE、DELETE)操作,而从数据库处理 SELECT 查询操作。数据库复制被用来把事务性操作导致的变更同步到其他从数据库。以 SQL 为例,主库负责写数据。读库负责读数据。每次有写库操作,同步更新到读库。写库就一个,读库可以有多个,采用日志同步的方式实现主库和多个读库的数据同步。 |
| 12 | + |
| 13 | + |
| 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 | +``` |
0 commit comments