配置
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 = 100linux安装
yum install mysql-serverdocker运行
#不用提前创建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:8windows安装
解压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即为成功