mysql 主从复制

mysql 主从复制

一主一从

配置主库

1,主库 mysql11 上开启设置

# 添加如下配置  
# 参数必须唯一, 本例主库设置为 11 ,从库设置为 12  
server_id=101  
log_bin=/var/log/mysql/mysql-bin

2,二进制日志文件的目录不是默认的,需要新建一下

# 创建文件夹  
$ sudo mkdir /var/log/mysql  
# 分配权限  
$ sudo chown mysql:mysql /var/log/mysql

3,重启主库的 MySQL 服务

$ sudo systemctl restart mysqld

4,测试

mysql> show master status  
+------------------+----------+--------------+------------------+-------------------+  
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |  
+------------------+----------+--------------+------------------+-------------------+  
| mysql-bin.000001 |      154 |              |                  |                   |  
+------------------+----------+--------------+------------------+-------------------+

从结果看到, File 字段有值,并且前面与配置文件一致,说明配置正确。后面的 000001 说明是第一次,如果 MySQL 重启服务,这个值会递增为 mysql-bin.000002

配置从库

1,从库 mysql11 上配置

# 从库配置  
server_id=12  
log_bin=/var/log/mysql/mysql-bin.log  
relay_log=/var/log/mysql/mysql-relay-bin.log  
#库设为只读的  
read_only=1

2,从库设置的二进制日志文件的目录不是默认的,需要新建一下

$ sudo mkdir /var/log/mysql  
# 分配权限  
$ sudo chown mysql:mysql /var/log/mysql

3,重启从库的 MySQL 服务

$ sudo systemctl restart mysqld

4,设置从库的复制参数

配置 mysql 主从复制时,在从机上需要进行 CHANGE MASTER TO 操作,以确定需要同步的主机 IP,用户名,密码,binlog 文件,binlog 位置等信息。

mysql> CHANGE MASTER TO MASTER_HOST='192.168.187.11',  
 -> MASTER_USER='admin',  
 -> MASTER_PASSWORD='admin',  
 #此选项初始化设置时需要跟主库中的一致。设置好后,如果主  
 #库发生重启等,不需再次设置,从库会跟着更新  
 -> MASTER_LOG_FILE='mysql-bin.000001',  
 # master Position的值  
 -> MASTER_LOG_POS=154; 

change master to 配置和改变 slave 服务器用于连接 master 服务器的参数,以便 slave 服务器读取 master 服务器的 binlog 及 slave 服务器的 relay log。同时也更新 master info 及 relay log info 信息库。执行该语句前如果从机上 slave io 及 sql 线程已经启动,需要先停止(执行 stop slave)。 change master to 后面不指定某个参数的话,该参数保留原值或默认值。所以后续如果某些参数没有更改的话,change master to 后无需带该参数,例如我们只改变了用于复制的用户密码,那么 change master to 只需针对 MASTER_PASSWORD 选项作出修改即可,例如:

mysql> stop slave;   
mysql> change master to master_password='new_password';  
mysql> start slave;

5. 查看从库状态

mysql> show slave status \G  
*************************** 1. row ***************************  
 Slave_IO_State:   
 Master_Host: 192.168.xxx.11  
 Master_User: admin  
 Master_Port: 3306  
 Connect_Retry: 60  
 Master_Log_File: mysql-bin.000001  
 Read_Master_Log_Pos: 154  
 Relay_Log_File: mysql-relay-bin.000001  
 Relay_Log_Pos: 4  
 Relay_Master_Log_File: mysql-bin.000001  
 Slave_IO_Running: No  
 Slave_SQL_Running: No  
*************************** 略 ***************************

6,从 Slave_IO_State, Slave_IO_Running: No, Slave_SQL_Running: No 表明当前从库的复制服务还没有启动, 启动从库

mysql> start slave;  
Query OK, 0 rows affected (0.03 sec)

再次查看 show slave status G

*************************** 1. row ***************************  
 Slave_IO_State: Waiting for master to send event  
 Master_Host: 192.168.187.11  
 Master_User: admin  
 Master_Port: 3306  
 Connect_Retry: 60  
 Master_Log_File: mysql-bin.000001  
 Read_Master_Log_Pos: 154  
 Relay_Log_File: mysql-relay-bin.000002  
 Relay_Log_Pos: 320  
 Relay_Master_Log_File: mysql-bin.000001  
 Slave_IO_Running: Yes  
 Slave_SQL_Running: Yes  
*************************** 略 ***************************

  
    展开阅读全文