老爹
老爹
发布于 2026-02-26 / 18 阅读
0
0

mysql

配置

  • linux /etc/my.cnf

  • windows /mysql安装根目录/my.ini

[mysql]
default-character-set=utf8

[client]
default-character-set=utf8

[mysqld]
port = 3306
# 基础设置
datadir = /home/mysql/data
tmpdir = /tmp
mysql_native_password = ON
# 自动过期binlog.000139文件 7天 = 7*24*3600 秒
binlog_expire_logs_seconds = 604800
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
# 连接设置
max_connections = 1000
max_connect_errors = 100000
wait_timeout = 28800
interactive_timeout = 28800
skip_name_resolve = 1
default_time_zone = '+8:00'
bind-address = 0.0.0.0
# 表名大小写 0区分 1不区分
lower_case_table_names = 1
# 内存和缓存设置
key_buffer_size = 256M
max_allowed_packet = 64M
thread_cache_size = 8
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
join_buffer_size = 4M
# InnoDB设置
innodb_buffer_pool_size = 512M
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_lock_wait_timeout = 50
innodb_rollback_on_timeout = 1
# 日志设置
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2
log_queries_not_using_indexes = 0
log_throttle_queries_not_using_indexes = 10
min_examined_row_limit = 100

linux安装

yum install mysql-server

docker运行

#不用提前创建data log 文件夹
#有时加tmp这行就不行,可能和版本有关?不知道狗日的咋回事
docker run -p 13307:3306 --name mysql --restart=always --privileged=true \
-v /home/mysql/my.cnf:/etc/my.cnf \
-v /home/mysql/data:/var/lib/mysql \
-v /home/mysql/log:/var/log/mysql \
-v /home/mysql/tmp:/tmp \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=密码 -d mysql:8

windows安装

  • 解压mysql包

  • 在根目录创建my.ini配置文件 注意文件编码ASCII

  • 初始化mysql数据目录:mysqld --initialize-insecure --console (无密码)

  • 安装 mysqld --install

  • 启动mysql服务

  • 可能需要的依赖(如windows server 2012)顺序如下

授权远程登录

若想指定人能连接,把%替换成她ip

use mysql;
update user set host='%' where user='root';
flush privileges;

改密码

use mysql;
ALTER USER 'root'@'%' IDENTIFIED BY '新密码';

导入导出

导入

mysql -u{usr} -p{pwd} {库} < {本地文件}.sql

导出 新版的mysqldump默认启用了一个新标志,需要通过--column-statistics=0来禁用他

mysqldump --host={ip} -u{usr} -p{pwd} --databases {库(可无)} --tables {表,多个以空格分隔(可无)} > {本地文件}.sql
#从前服务器导入到后服务器
mysqldump --host={前ip} --port={端口} -u{usr} -p{pwd} -C --databases {库} |mysql --host={后ip} --port={端口} -u{usr} -p{pwd} {库} 

数据同步

主机配置

[mysqld]

# master的配置
server-id=1             # 服务器id (设置唯一标识)
binlog-do-db=数据库名称  # 要给从机同步的库  不写这行就全同步
binlog-ignore-db=mysql  # 不给从机同步的库(多个写多行)
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
log-bin=/home/mysql/log/mysql-bin.log           # 打开日志(主机需要打开),可以指定绝对路径;
expire_logs_days=7     # 自动清理 90 天前的log文件,可根据需要修改

从机配置

# slave配置
server-id=2                 # MySQLid 后面2个从服务器需设置不同
skip_slave_start=0          # 复制进程随着数据库的启动而启动;
#加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。
read_only = 1               # 从库普通账户只读;
slave-skip-errors = 1032, 1062, 1007
#relay_log_recovery=1       # 从机禁止写
#super_read_only=1          # 从机禁止写

从机8.0.22-

STOP SLAVE;  -- 如果之前已经设置过复制,先停止复制进程
RESET SLAVE ALL; -- 清除以前的配置
CHANGE MASTER TO
  MASTER_HOST = 'ip', -- 主机
  MASTER_PORT = 3306,
  MASTER_USER = '用户名',
  MASTER_PASSWORD = '密码',
  MASTER_LOG_FILE = 'mysql-bin.000002',  -- 从主服务器 SHOW MASTER STATUS 获取
  MASTER_LOG_POS = 10351795;  -- 从主服务器 SHOW MASTER STATUS 获取到的值

START SLAVE; -- 启动
SHOW SLAVE STATUS;  -- 查看状态 Slave_IO_Running 和 Slave_SQL_Running 都是yes即为成功

从机8.0.22+

STOP REPLICA;  -- 如果之前已经设置过复制,先停止复制进程
RESET REPLICA ALL; -- 清除以前的配置
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST = 'ip', -- 主机
  SOURCE_PORT = 3306,
  SOURCE_USER = 'root',
  SOURCE_PASSWORD = '密码',
  SOURCE_LOG_FILE = 'mysql-bin.000100',  -- 从主服务器 SHOW MASTER STATUS 获取
  SOURCE_LOG_POS = 336978858;  -- 从主服务器 SHOW MASTER STATUS 获取到的值

START REPLICA; -- 启动
SHOW REPLICA STATUS;  -- 查看状态 Slave_IO_Running 和 Slave_SQL_Running 都是yes即为成功


评论