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

mysql

配置

  • linux /etc/my.cnf

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

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

[mysqld]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
# 数据位置
datadir=/home/mysql/data
log-error=/home/mysql/log/mysqld.log
bind-address=0.0.0.0
#最大连接数
max_connections=200
#skip-name-resolve
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4


#后边无特殊需求默认即可
#可以在保证性能的基础上提升批量插入的速度 8G
bulk_insert_buffer_size=8388608
#交互式关闭连接前的等待秒数
wait_timeout=28800
#非交互式关闭连接前的等待秒数
interactive_timeout=28800#缓存池通常占用内存60%-80%
innodb_buffer_pool_size=10G
#缓存表的数量,用以提升查询速度
table_open_cache=2048
#可以分配给内存表的最大存储空间,超出时会从内存表转换为普通的磁盘表
max_heap_table_size=5G
#临时表可用大小
tmp_table_size=1G
#客户端断开之后,将会缓存起来以响应下一个客户
thread_cache_size=40
#执行大型查询时最大临时文件的大小限制
myisam_max_sort_file_size=5G
#索引缓存 8M
key_buffer_size=8M
#在有查询时会一次性分配该参数指定大小的全部内存。 8M
read_buffer_size=8M
#在有查询时会分配需要的内存大小而不是全部指定的大小。 8M
read_rnd_buffer_size=8M
#执行排序使用的缓冲大小 8M
sort_buffer_size=8M
#一次传送数据包的过程当中最大允许的数据包大小
max_allowed_packet=1G
#innodb_force_recovery=0
expire_logs_days=3

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/mysql/log \
-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即为成功


评论