mysql5.7主从复制、只读模式

1、主库操作

主库的my.cnf配置
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4 
collation-server=utf8mb4_general_ci
sql_mode=''

server-id=100
log-bin=mysql-bin
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = db
#同步的类型(推荐MIXED 经过验证这是目前最优选择)
binlog_format=MIXED




#创建同步数据用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
#修改密码语句(备用)
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';


#主库设置为只读状态
show global variables like "%read_only%";
#给所有的表加读锁的命令
flush tables with read lock;
#设置为只读状态
set global read_only=1;
show global variables like "%read_only%";


#查看主库状态
show master status;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.001005 |   012    | db           |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

2、从库操作

#从库my.cnf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4 
collation-server=utf8mb4_general_ci
sql_mode=''

server-id=102


#导出主库数据
docker exec mysql mysqldump -h 172.17.xx.xx -P 3306 -uroot -p123456 --quick --events --flush-logs  --max_allowed_packet=4194300 --net_buffer_length=16384 --single-transaction -R --triggers --databases db > db.sql


#导入从库 mysql -u root -p之后 直接source导入(存放在docker logs映射文件中)
source /logs/db.sql


#配置主库关联 其中MASTER_LOG_FILE 和MASTER_LOG_POS 对应主库参数
stop slave;
reset slave;
#复制主机的命令
CHANGE MASTER TO MASTER_HOST='172.17.xx.xx',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
master_port=3306,
MASTER_LOG_FILE='mysql-bin.000105',MASTER_LOG_POS=012;


#给所有的表加读锁的命令
flush tables with read lock;
#设置为只读状态
set global read_only=1;

#启动从库复制功能
start slave;



show slave status \G;

3、主库解除锁定

#主库解除只读状态
unlock tables;
set global read_only=0;

到这里就结束了,应用服务可以正常启动了 

命令解析

对于数据库读写状态,主要靠 “read_only”全局参数来设定;但设置 read_only=1 状态有两个需要注意的地方:
      1.read_only=1只读模式,不会影响slave同步复制的功能,所以在MySQL slave库中设定了read_only=1后,通过 show slave status\G 命令查看salve状态,可以看到salve仍然会读取master上的日志,并且在slave库中应用日志,保证主从数据库同步一致;
      2.read_only=1只读模式,可以限定普通用户进行数据修改的操作,但不会限定具有super权限的用户的数据修改操作;在MySQL中设置read_only=1后,普通用户不能进行insert、update、delete等会产生数据变化的DML操作,但具有super权限的用户,例如root登录到数据库,还是可以进行数据变化的DML操作;为了确保所有用户,包括具有super权限的用户也不能进行读写操作,就需要执行给所有的表加读锁的命令 “flush tables with read lock;”


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 5.7的主从复制配置步骤如下: 1. 在主库上重启MySQL服务并进入MySQL控制台。创建一个用于从库复制的用户,并为其授权。 ``` CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; ``` 2. 在主库上查看主库参数,记住File和Position对应的参数值,从库需要配置这些参数。 ``` show master status; ``` 3. 在从库上重启MySQL服务并进入MySQL控制台。配置主库参数,将master_log_file设置为主库的File值,将master_log_pos设置为主库的Position值。 ``` change master to master_host='192.168.1.15', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=2336, master_connect_retry=30; ``` 4. 在从库上启动主从复制。 ``` start slave; ``` 5. 查看主从复制状态,确保Slave_IO_Running和Slave_SQL_Running都为Yes。 ``` show slave status \G; ``` 6. 若要修改MySQL配置文件,进入配置文件中的部分,插入或修改以下关键配置: ``` [mysqld] log-bin=mysql-bin server-id=1 ``` 请确保在配置主从复制之前,主库和从库之间可以正常通信,且主库的binlog模式已经开启。当主从复制配置成功后,从库会自动从主库同步数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MySQL 5.7 主从复制](https://blog.csdn.net/MrYang_Wei/article/details/129587645)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [MySQL5.7主从复制](https://blog.csdn.net/qq_43681755/article/details/108365639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值