MySQL5.7 主从配置

1. 下载安装包

  • 下载适合操作系统的5.7版本MySQL,5.7.18版本下载
  • 将下载完的安装包拷贝到目标服务器上(过程略)
  • 解压文件
$tar -xvf mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar 
mysql-community-server-5.7.18-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.18-1.el7.x86_64.rpm
mysql-community-devel-5.7.18-1.el7.x86_64.rpm
mysql-community-client-5.7.18-1.el7.x86_64.rpm
mysql-community-common-5.7.18-1.el7.x86_64.rpm
mysql-community-embedded-5.7.18-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.18-1.el7.x86_64.rpm
mysql-community-libs-5.7.18-1.el7.x86_64.rpm
mysql-community-server-minimal-5.7.18-1.el7.x86_64.rpm
mysql-community-test-5.7.18-1.el7.x86_64.rpm
mysql-community-minimal-debuginfo-5.7.18-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.18-1.el7.x86_64.rpm

2. 安装MySQL

  1. 卸载系统自带的mariadb
$ rpm -qa|grep mariadb
mariadb-libs-5.5.44-2.el7.centos.x86_64
$ rpm -e mariadb-libs-5.5.44-2.el7.centos.x86_64 --nodeps
  1. 安装软件
$rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm
$rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm
$rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rpm 
$rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rpm
  1. 数据库初始化
    在 *nix 系统中,为了保证数据库目录为与文件的所有者为 mysql 登陆用户,如果你是以 root 身份运行 mysql 服务,需要执行下面的命令初始化
$ mysqld --initialize --user=mysql

如果是以 mysql 身份运行,则可以去掉 --user 选项。

另外 --initialize 选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将该密码标记为过期,登陆后你需要设置一个新的密码,而使用 --initialize-insecure 命令则不使用安全模式,则不会为 root 用户生成一个密码。

$cat /var/log/mysqld.log 
2017-06-13T06:35:39.958489Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for 
more details).2017-06-13T06:35:42.024574Z 0 [Warning] InnoDB: New log files created, LSN=45790
2017-06-13T06:35:42.278002Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2017-06-13T06:35:42.369264Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 85d
6cb08-5002-11e7-a098-00163e30a467.2017-06-13T06:35:42.371839Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2017-06-13T06:35:42.372296Z 1 [Note] A temporary password is generated for root@localhost: ffv*1h7NGteo

最后一行给了root密码,用这个密码登录mysql

$systemctl start mysqld
$mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.18

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
  1. 修改数据库密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
  1. 数据库外网访问
mysql> use mysql
mysql> update user set host='%' where user='root';
mysql> flush privileges;
  1. 数据库配置
[mysqld]
####基本配置####
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
# 时区调整(所有节点统一)
default-time-zone = '+8:00' 
# 服务器ID
server-id = 1
# 端口
port = 3306
# 开启二进制日志并配置日志名
log_bin = master.bin
# 忽略大小写区分
lower_case_table_names=1
# 关闭自动提交
autocommit = 0
# 修改默认编码
character_set_server=utf8
# timestamp列的默认值,null-null,其他-0000-00-00 00:00:00
explicit_defaults_for_timestamp = 1
# 临时文件路径
tmpdir = /tmp
# 定义支持的语法、数据校验等
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
# 兼容5.7版本之前的用法
show_compatibility_56=on
# 事物的写入方式-哈希编码方式
transaction_write_set_extraction=MURMUR32
# 文件路径
datadir= /var/lib/mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
####安全相关####
# 跳过域名解析
skip_name_resolve = 1
# 最大错误连接数,阻止破解
max_connect_errors = 1000
# 事务隔离级别,只能读取到已经提交的数据
transaction_isolation = READ-COMMITTED
####性能相关####
# 最大IP连接数
max_connections = 300
# 临时表大小 64M
tmp_table_size = 67108864
# 限制server接受的数据包大小 16M
max_allowed_packet = 16777216
# 服务器关闭交互式连接前等待秒数,30分钟
interactive_timeout = 1800
# 服务器关闭非交互式连接前等待秒数,30分钟
wait_timeout = 1800
# 读入缓冲区大小
read_buffer_size = 1M
# 随机读缓冲区大小
read_rnd_buffer_size = 2M
# 每一次事物提交都将binlog_cache中的数据强制写到磁盘
sync_binlog = 1
####日志相关####
# 开启慢查询日志
slow_query_log = 1
# 慢查询日志名
slow_query_log_file = slow.log
# 慢查询阈值,查询时间超过阈值时写入到慢日志中
long_query_time = 2
# 未使用索引的查询也被记录到慢日志中
log_queries_not_using_indexes = 1
# 指定执行过慢的DDL语句写入慢日志
log_slow_admin_statements = 1
# 从库将超过查询阈值的查询记录到慢日志
log_slow_slave_statements = 1
# 设置每分钟记录记录的未使用索引的查询的数量10
log_throttle_queries_not_using_indexes = 10
# 少于100行的查询不会记录到慢日志中
min_examined_row_limit = 100
# 二进制日志自动删除的天数 
expire_logs_days = 90
# 日志记录时间戳和系统时间一致
log_timestamps=system
# 错误日志路径
log-error=/var/log/mysqld.log
# 二进制文件模式
binlog_format = row
####复制方式相关-半同步复制####
# 插件路径
#plugin_dir=/usr/lib/mysql/plugin
# 加载的插件列表
plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
# 主库开启半同步
loose_rpl_semi_sync_master_enabled = 1
# 从库开启半同步
loose_rpl_semi_sync_slave_enabled = 1
# 等待超时时间
loose_rpl_semi_sync_master_timeout = 5000
# 设置主需要等待多少个slave应答,才能返回给客户端,默认为1
rpl_semi_sync_master_wait_for_slave_count=1
# 主库在返回给会话事务成功之前提交事务的方式
rpl_semi_sync_master_wait_point=AFTER_SYNC
####复制错误相关####
# 复制过程中从服务器跳过所有错误,也可以指定错误号
slave_skip_errors = all
####复制信息相关####
# 将主库状态和信息记录到表中
master_info_repository = TABLE
# 将relay日志中的从库日志位置记录到表中
relay_log_info_repository = TABLE
# 从库宕机后,自动放弃所有未执行的中继日志,重新从主库上获取日志
relay_log_recovery = 1
# 指定中继日志的位置和文件名
relay_log = relay.log
####GTID相关####
# 开启gtid工作模式
gtid_mode = on
# 只允许能保障事物安全,且能够被日志记录的SQL语句被执行
enforce_gtid_consistency = 1
# 从库从主库复制数据时的操作也写入binlog
log_slave_updates = 1
# 重启和启动时,如何迭代使用binlog文件
binlog_gtid_simple_recovery = 1
####InnoDB相关####
# 缓冲池字节大小
innodb_buffer_pool_size = 800M
# 缓冲池实例数量
innodb_buffer_pool_instances = 8
# 启动时将热数据加载到内存
innodb_buffer_pool_load_at_startup = 1
# 关闭时将热数据dump到本地磁盘
innodb_buffer_pool_dump_at_shutdown = 1
# page cleaner线程每次刷新脏页的数量
innodb_lru_scan_depth = 2000
# 事务等待获取资源等待的最长时间
innodb_lock_wait_timeout = 5
# 调整刷新脏页的数量
innodb_io_capacity = 4000
# 刷新脏页的最大值
innodb_io_capacity_max = 8000
# 数据和日志写入磁盘的方式-直接写入磁盘
innodb_flush_method = O_DIRECT
# 文件格式,Barracuda支持压缩页,新格式
innodb_file_format = Barracuda
# 设置文件格式最高版本
innodb_file_format_max = Barracuda
# 刷新脏页临近页
innodb_flush_neighbors = 1
# 用来缓冲日志数据的缓冲区大小
innodb_log_buffer_size = 1M
# 单独的清除线程数量-0不适用单独线程
innodb_purge_threads = 4
# 为字段创建索引时,限制的字节长度,超过直接报错
innodb_large_prefix = 1
# 线程并发数
innodb_thread_concurrency = 64
# 将发生的所有死锁信息都记录到错误日志中
innodb_print_all_deadlocks = 1
# 严格检查模式,写法有错误直接报错,不警告
innodb_strict_mode = 1
# 建立索引时用于排序数据的排序缓冲区大小-10M
innodb_sort_buffer_size = 10485760
# 转储缓冲池中read out and dump 的最近使用的页的占比
innodb_buffer_pool_dump_pct = 40
# page cleaner线程数量
innodb_page_cleaners = 4
# 开启在线回收undo log日志文件
innodb_undo_log_truncate = 1
# 超过这个阈值时触发回收
innodb_max_undo_log_size = 2G
# 回收undo日志的频率
innodb_purge_rseg_truncate_frequency = 128
innodb_flush_log_at_trx_commit=1
innodb_support_xa=1

开启了binlog,gtid,半同步复制以及innodb优化。
注意:日志路径需要保持默认,不要配置插件路径,不然半同步插件安装失败导致无法启动。

3. MySQL 主从复制开发

1. 创建复制用户并授权

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'password';

2. 从库连接主库

change master to master_host ='172.19.6.209', master_port = 3306, master_user = 'repl', master_password = 'password', MASTER_AUTO_POSITION = 1, MASTER_RETRY_COUNT = 0, MASTER_HEARTBEAT_PERIOD = 10000;
start slave;

3. 验证

show slave status;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容