FLUSH TABLES WITH READ LOCK和set global read_only=1的区别

本文详细介绍了MySQL中设置全局只读模式的方法及其效果,对比了使用set global read_only与FLUSH TABLES WITH READ LOCK的区别,并通过示例展示了不同场景下只读锁的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

set global read_only是全局级别的,置为1之后root用户还可以写,其他用户不能写
FLUSH TABLES WITH READ LOCK是表级别的(使用UNLOCK tables解锁),执行之后所有用户都不能写,但是在flush tables以后lock就失效了,而set global read_only不会失效

set global read_only=true或set global read_only=on或set global read_only=1一样
set global read_only=false或set global read_only=off或set global read_only=0一样

1: select @@read_only \G
->@@read_only: 0
1: CREATE TABLE IF NOT EXISTS bla (id BIGINT(16), PRIMARY KEY(id));
1: LOCK TABLE bla READ;
2: set global read_only=0;
->Will block until the lock from connection 1 is released.

1: UNLOCK TABLES;
2: set global read_only=1;
1: select @@read_only \G
->@@read_only: 1
1: LOCK TABLE bla READ;
2: set global read_only=1;
->Will block until the lock from connection 1 is released.

1: UNLOCK TABLES;
1: select @@read_only \G
->@@read_only: 1
1: LOCK TABLE bla READ;
2: set global read_only=0;
->Will block until the lock from connection 1 is released.

[client] port=3306 [mysql] no-beep default-character-set = utf8mb4 [mysqld] init_connect='SET autocommit=0;' init_file=E:\\MySQL\\init.sql # 基础配置 port=3306 datadir=E:\MySQL\Data default-storage-engine=INNODB server-id=1 lower_case_table_names=1 secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.2/Uploads" # 修复连接问题的关键设置 bind-address=0.0.0.0 # 允许所有IP连接 skip_name_resolve=ON # 禁用DNS反向解析 # 认证策略修复 authentication_policy=mysql_native_password, # 字符集 character-set-server=utf8mb4 collation-server=utf8mb4_0900_ai_ci # SQL模式 sql-mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION" # 日志配置 log-output=FILE general-log=0 general_log_file="XIANJH.log" slow-query-log=1 slow_query_log_file="XIANJH-slow.log" long_query_time=3 log-error="XIANJH.err" log-bin="XIANJH-bin" binlog_expire_logs_seconds=604800 # 内存优化 max_connections=300 table_open_cache=5000 table_open_cache_instances=16 temptable_max_ram=2G tmp_table_size=512M max_heap_table_size=512M internal_tmp_mem_storage_engine=TempTable # InnoDB优化 innodb_buffer_pool_size=40G innodb_log_file_size=2G innodb_buffer_pool_instances=16 innodb_log_buffer_size=256M innodb_redo_log_capacity=4G innodb_flush_log_at_trx_commit=2 innodb_autoinc_lock_mode=2 bulk_insert_buffer_size=256M innodb_doublewrite=ON innodb_io_capacity=8000 innodb_io_capacity_max=16000 innodb_use_native_aio=ON innodb_flush_method=normal # 线程优化 innodb_thread_concurrency=0 innodb_parallel_read_threads=10 innodb_read_io_threads=10 innodb_write_io_threads=10 thread_cache_size=50 innodb_purge_threads=4 # 连接与网络 max_allowed_packet=256M net_buffer_length=32K max_connect_errors=1000 wait_timeout=300 interactive_timeout=300 # 文件与缓存 open_files_limit=10000 innodb_open_files=5000 innodb_file_per_table=ON innodb_autoextend_increment=128 # 查询优化 join_buffer_size=4M sort_buffer_size=4M read_buffer_size=1M read_rnd_buffer_size=1M # 性能与安全 performance_schema=ON innodb_checksum_algorithm=0 innodb_old_blocks_time=1000 innodb_stats_on_metadata=0 flush_time=0 # 复制相关 binlog_row_event_max_size=8K sync_source_info=10000 sync_relay_log=10000 # MySQL X Protocol loose_mysqlx_port=33060 这是我目前的my.ini的配置,我电脑是WIN10的操作系统,MYSQL版本是8.2,CPU是10核20线程的E5 2666V3,运存是4通道共64G服务器DD3内存,硬盘是SATA协议的1T SSD
最新发布
06-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值