Mysql 5.7.18:主从复制,io优化
#目录
#挂盘
#时间同步
#master节点,进行如下操作:
#下载安装 #初始化 #配置文件 #开机启动 #服务启动 #初始数据库
#slave节点,进行如下操作:
#下载安装 #初始化 #配置文件 #开机启动 #服务启动 #初始化数据库
#主从开启
#master上分配从库复制的账户密码 #slave上开启主从复制 #master上创建数据库 #slave上查看是否同步数据库 #开机启动
#测试
#master上创建表 #slave上查看数据
#磁盘性能优化
#简介
原本是一个开放源代码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被昇阳微系统(Sun Microsystems)收购。2009年,甲骨文公司(Oracle)收购昇阳微系统公司,MySQL成为Oracle旗下产品。
MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。
本文简要介绍mysql的主从复制和io优化的相关内容,mysql的主从复制主要应用在数据库的备份和读写分离上,备份即是通过从库来实现,读写分离主要是来实现性能优化和负载分担。其中磁盘性能优化是在数据库运维中踩的一个坑,当时测试环境机器人跑起来,主库读写上涨,从库延迟 show slave status查看Seconds_Behind_Master值逐渐增加,远远落后于主库,从库表现为磁盘io过大,将近2000 iops,解决方案为配置文件添加两个参数,使得io降至100-200iops左右,主从同步正常。
#挂盘
fdisk -l
mkfs.ext4 -j /dev/sdc
echo "/dev/sdc /data/mysqldata ext4 defaults 0 0" >> /etc/fstab
mount -a
mount
#时间同步
yes|cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock -w
#master节点,进行如下操作:
#下载安装
yum -y install autoconf wget
mkdir -pv /data/soft
wget -P /data/soft/ http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
cd /data/soft
tar -xf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
cd /usr/local/
ln -sv mysql-5.7.18-linux-glibc2.5-x86_64 mysql
useradd -M -s /sbin/nologin mysql
cat /etc/passwd |grep mysql
cat /etc/group |grep mysql
mkdir -p /data/mysqldata
chown -R mysql:mysql /data/mysqldata
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sed -i 's#^basedir=$#basedir=/usr/local/mysql#' /etc/init.d/mysqld
sed -i 's#^datadir=$#datadir=/data/mysqldata#' /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
#初始化
cd /usr/local/mysql/bin/
./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldata
#配置文件
- cat > /etc/my.cnf << "EOF"
- [client]
- port =
- socket = /tmp/mysql.sock
- default-character-set = utf8
- [mysql]
- no-auto-rehash
- default-character-set = utf8
- [mysqld]
- server-id =
- port =
- user = mysql
- basedir = /usr/local/mysql
- datadir = /data/mysqldata
- socket = /tmp/mysql.sock
- default-storage-engine = INNODB
- character-set-server = utf8
- connect_timeout =
- interactive_timeout =
- wait_timeout =
- back_log =
- event_scheduler = ON
- skip_name_resolve = ON
- ###########master-slave##########
- log-bin = mysql-bin
- binlog_format = row
- max_binlog_size = 128M
- binlog_cache_size = 2M
- expire-logs-days =
- log-slave-updates=true
- gtid-mode=on
- enforce-gtid-consistency=true
- master_info_repository=TABLE
- relay_log_info_repository=TABLE
- relay_log_recovery=
- sync-master-info=
- slave-parallel-workers=
- binlog-checksum=CRC32
- master-verify-checksum=
- slave-sql-verify-checksum=
- binlog-rows-query-log_events=
- binlog-ignore-db=mysql
- binlog-ignore-db=test
- binlog-ignore-db=information_schema
- binlog-ignore-db=performance_schema
- ###往磁盘里写入数据的频率,极大影响数据库磁盘io性能,配合iostat -dxm
- innodb_flush_log_at_trx_commit =
- sync_binlog=
- ###该参数可以提升数据库的读的性能,一般设置为内存的80%
- innodb_buffer_pool_size=6G
- ###########slow_query##########
- slow_query_log =
- slow_query_log_file = slow.log
- long_query_time =
- max_connections =
- max_connect_errors =
- log_bin_trust_function_creators =
- transaction_isolation = READ-COMMITTED
- log_error = error.log
- EOF
my.cnf
#开机启动
cat >> /etc/profile << "EOF"
export PATH=$PATH:/usr/local/mysql/bin
EOF
source /etc/profile
#服务启动
/etc/init.d/mysqld start
#服务启动
mysql -uroot
use mysql;
update user set authentication_string=password('123456') where user='root';
flush privileges;
\q
#slave节点,进行如下操作:
#slave节点,进行如下操作:
yum -y install autoconf wget
wget -P /data/soft/ http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
cd /data/soft
tar -xf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
cd /usr/local/
ln -sv mysql-5.7.18-linux-glibc2.5-x86_64 mysql
useradd -M -s /sbin/nologin mysql
cat /etc/passwd |grep mysql
cat /etc/group |grep mysql
mkdir -p /data/mysqldata
chown -R mysql:mysql /data/mysqldata
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sed -i 's#^basedir=$#basedir=/usr/local/mysql#' /etc/init.d/mysqld
sed -i 's#^datadir=$#datadir=/data/mysqldata#' /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
#初始化
cd /usr/local/mysql/bin/
./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldata
#配置文件
- cat > /etc/my.cnf << "EOF"
- [client]
- port =
- socket = /tmp/mysql.sock
- default-character-set = utf8
- [mysql]
- no-auto-rehash
- default-character-set = utf8
- [mysqld]
- server-id =
- port =
- basedir = /usr/local/mysql
- datadir = /data/mysqldata
- socket = /tmp/mysql.sock
- default-storage-engine = INNODB
- character-set-server = utf8
- connect_timeout =
- interactive_timeout =
- wait_timeout =
- back_log =
- event_scheduler = ON
- skip_name_resolve = ON
- ###########master-slave##########
- log-bin = mysql-bin
- binlog_format = row
- max_binlog_size = 128M
- binlog_cache_size = 2M
- expire-logs-days =
- log-slave-updates=true
- gtid-mode=on
- enforce-gtid-consistency=true
- master_info_repository=TABLE
- relay_log_info_repository=TABLE
- relay_log_recovery=
- sync-master-info=
- slave-parallel-workers=
- binlog-checksum=CRC32
- master-verify-checksum=
- slave-sql-verify-checksum=
- binlog-rows-query-log_events=
- binlog-ignore-db=mysql
- binlog-ignore-db=test
- binlog-ignore-db=information_schema
- binlog-ignore-db=performance_schema
- ###往磁盘里写入数据的频率,极大影响从库磁盘io性能
- innodb_flush_log_at_trx_commit =
- sync_binlog=
- innodb_buffer_pool_size=6G
- slave_exec_mode=IDEMPOTENT
- #该配置能够实现一台主机上的多个数据库到从库的多对一复制
- #replicate-rewrite-db = user -> com
- #replicate-rewrite-db = trader -> com
- #replicate-rewrite-db = pay -> com
- ###########slow_query##########
- slow_query_log =
- slow_query_log_file = slow.log
- long_query_time =
- max_connections =
- max_connect_errors =
- log_bin_trust_function_creators =
- transaction_isolation = READ-COMMITTED
- log_error = error.log
- EOF
my.cnf
#开机启动
cat >> /etc/profile << "EOF"
export PATH=$PATH:/usr/local/mysql/bin
EOF
source /etc/profile
#服务启动
/etc/init.d/mysqld start
echo "/etc/init.d/mysqld start" >> /etc/rc.d/rc.local
#初始化数据库
mysql -uroot
use mysql;
update user set authentication_string=password('123456') where user='root';flush privileges;
flush privileges;
\q
#主从开启
#master上分配从库复制的账户密码
mysql -uroot -p'123456' -e "grant replication slave on *.* to 'slave'@'%' identified by 'slave123456';"
mysql -uroot -p'123456' -e "use mysql; select user,repl_slave_priv from user where user='slave';"
#slave上开启主从复制
mysql -uroot -p'123456' -e "change master to master_host='10.0.0.4',master_user='slave',master_password='slave123456',master_connect_retry=1;"
mysql -uroot -p'123456' -e "start slave;"
mysql -uroot -p'123456' -e "show slave status\G;"
#master上创建数据库
mysql -uroot -p'123456' -e "create database trader default character set utf8 collate utf8_bin;grant all on trader.* to 'com'@'%' identified by '654321';"
mysql -uroot -p'123456' -e "create database pay default character set utf8 collate utf8_bin;grant all on pay.* to 'com'@'%' identified by '654321';"
mysql -uroot -p'123456' -e "create database user default character set utf8 collate utf8_bin;grant all on user.* to 'com'@'%' identified by '654321';"
#slave上查看是否同步数据库
mysql -uroot -p'123456' -e "show slave status\G;"
mysql -uroot -p'123456' -e "show databases;"
#开机启动
/etc/init.d/mysqld start
echo "/etc/init.d/mysqld start" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
#测试
#master上创建表
mysql -uroot -p'123456' -e "use pay; create table pay (id int unsigned not null auto_increment, name char(20) not null, age tinyint not null, primary key(id), unique key(name), index(age)); insert into pay(name,age) values ('user1',20); select * from pay;"
mysql -uroot -p'123456' -e "use trader; create table trader (id int unsigned not null auto_increment, name char(20) not null, age tinyint not null, primary key(id), unique key(name), index(age)); insert into trader(name,age) values ('user1',20); select * from trader;"
mysql -uroot -p'123456' -e "use user; create table user (id int unsigned not null auto_increment, name char(20) not null, age tinyint not null, primary key(id), unique key(name), index(age)); insert into user(name,age) values ('user1',20); select * from user;"
#slave上查看数据
mysql -uroot -p'123456' -e "show databases; use com; show tables;";
#磁盘性能优化
###往磁盘里写入数据的频率,极大影响数据库磁盘io性能,配合iostat -dxm 1
innodb_flush_log_at_trx_commit = 2
sync_binlog=100
Mysql 5.7.18:主从复制,io优化的更多相关文章
- SSD 下的 MySQL(5.5) IO 优化
一 目录 一 目录 二 背景 三 SSD 特性 四 基于 SSD 的数据库优化 五 A 项目 MySQL 主从关系图 六 程序切换之前调优 6.1 修改系统 IO 调度算法 6.2 修改 innodb ...
- MySQL 5.7.18 主从复制 Error1205
从库报 error 1205 1.mysql报错信息 [root@slave2(35.102) ~]# mysql -uroot -p Enter password: Welcome to the M ...
- MySQL基础之第18章 性能优化
18.1.优化简介 SHOW STATUS LIKE ‘value’;connections 连接数uptime 启动 ...
- MySQL 5.7.18的安装及主从复制(主从同步)
MySQL 5.7.18的安装与主从复制 IP 计算机名 角色 192.168.1.222 001 master 192.168.1.233 002 slave CentOS 6.9安装mysql5. ...
- Mysql实现企业级数据库主从复制架构实战
场景 公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公司业务中断,损失100万,老王做出深刻反省,公司 ...
- 项目实战7—Mysql实现企业级数据库主从复制架构实战
Mysql实现企业级数据库主从复制架构实战 环境背景:公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公 ...
- 重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化
重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化 一:Mysql原理与慢查询 MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能 ...
- MySql(八):MySQL性能调优——Query 的优化
一.理解MySQL的Query Optimizer MySQL Optimizer是一个专门负责优化SELECT 语句的优化器模块,它主要的功能就是通过计算分析系统中收集的各种统计信息,为客户端请求的 ...
- Mysql数据库调优和性能优化
1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开源数据库,但是mysql数据库的默认设置性能非常 ...
随机推荐
- BigInteger&BigDecimal类
BigInteger类 当需要处理超过 long 数值范围的大整数时,java.math 包中的 BigInteger 类提供任意精度的整数运算. 构造方式 //构造方法,将BigInteger的十进 ...
- SpringBoot入门(一)
1 简介 Spring Boot是快速搭建Spring工程的脚手架,简化配置与依赖关系(约定大于配置),让我们把精力集中在业务部分 2 简单入门事例 创建一个Hello World的Web工程 2.1 ...
- cogs 1583. [POJ 3237] 树的维护 树链剖分套线段树
1583. [POJ 3237] 树的维护 ★★★★ 输入文件:maintaintree.in 输出文件:maintaintree.out 简单对比时间限制:5 s 内存限制:128 ...
- 测试必备之Java知识(三)—— 集合、Map相关
集合相关 List.Set.Map的区别 类型 描述 List 允许重复对象,可插入多个null元素,有序 Set 不允许重复对象,只允许一个null元素,无序 Map 不是collection的子接 ...
- ORM跨表查询总结
一.基于对象的查询-->子查询 1.一对多 正向查询:基于 字段 反向查询:基于 表名__set.all() 注意:表名全部小写 2.多对多 正向查询:基于 字段.all() 反向查询:基于 表 ...
- Manipulating Data from Oracle Object Storage to ADW with Oracle Data Integrator (ODI)
0. Introduction and Prerequisites This article presents an overview on how to use Oracle Data Integr ...
- CTF-Keylead(ASIS CTF 2015)
将keylead下载到本地用7-ZIP打开,发现主要文件 keylead~ 在ubuntu里跑起来,发现是个游戏,按回车后要摇出3,1,3,3,7就能获得flag. 拖进IDA 直接开启远程调试,跑起 ...
- Docker windows nano server容器中安装ssh实现远程登录管理
[问题] 使用ServiceMonitor.exe作为前台进程运行起来的容器无法attach. 无法远程连接到运行中的容器中进行管理. [解决方法] 在container中新建管理员用户,通过SSH实 ...
- Collections.synchronizedList 、CopyOnWriteArrayList、Vector介绍、源码浅析与性能对比
## ArrayList线程安全问题 众所周知,`ArrayList`不是线程安全的,在并发场景使用`ArrayList`可能会导致add内容为null,迭代时并发修改list内容抛`Concurre ...
- Java容器解析系列(16) android内存优化之SparseArray
HashMap的缺点: 自动装箱导致的性能损失; 使用拉链法来解决hash冲突,如果hash冲突较多,需要遍历链表,导致性能下降,在Java 8 中,如果链表长度>8,会使用红黑树来代替链表; ...