首先安装mysql

wget 'https://dev.mysql.com/get/mysql57-community-release
-el7-
11.noarch.rpm'

rpm -Uvh mysql57-community-release-el7-11.noarch.rpm

yum install -y mysql-community-server
#启动服务
systemctl start mysqld
#查看服务状态
systemctl status mysqld

#查看数据库密码
grep 'temporary password' /var/log/mysqld.log
#然后利用这个密码进入mysql命令行 mysql -uroot -p查到的密码

SET PASSWORD = PASSWORD('Admin123!');

#设置远程登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED
 BY 'Admin123!' WITH GRANT OPTION;
flush privileges;

vim /etc/my.cnf
#在[mysqld]下面添加,不需要分号
#字符集:注意是utf8而不是utf-8!
character-set-server=utf8
#这时候使用show variables like 'char%';就可以查看到字符集都是utf8了
#sql支持group by语句
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_
SUBSTITUTION
#设置时区为东八区
default-time_zone = '+8:00'

#重启服务
systemctl restart mysqld

#设置开机启动
systemctl enable mysqld
systemctl daemon-reload

#如果需要更改为简单的密码

#1.停止mysql服务

systemctl stop mysqld.service


#2.修改配置文件无密码登录

vim  /etc/my.cnf

#在最后加上

skip-grant-tables

#保存

#3.启动mysql

systemctl  start  mysqld.service


#4.登录mysql

mysql -u root

#注意这里不要加-p

#5.修改密码,mysql5.7用此语法

use mysql;

update mysql.user set authentication_string=password('123456') where user='root' ;  

#6.回到第二部把刚加的那句删掉

#保存,重启mysql就可以了

主从同步的定义

主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。

使用主从同步的好处

(1) 通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
(2)提高数据安全,因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据
(3) 在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能

主从同步的机制

Mysql服务器之间的主从同步是基于二进制日志机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。
在使用二进制日志时,主服务器的所有操作都会被记录下来,然后从服务器会接收到该日志的一个副本。从服务器可以指定执行该日志中的哪一类事件(譬如只插入数据或者只更新数据),默认会执行日志中的所有语句。
每一个从服务器会记录关于二进制日志的信息:文件名和已经处理过的语句,这样意味着不同的从服务器可以分别执行同一个二进制日志的不同部分,并且从服务器可以随时连接或者中断和服务器的连接。
主服务器和每一个从服务器都必须配置一个唯一的ID号(在my.cnf文件的[mysqld]模块下有一个server-id配置项),另外,每一个从服务器还需要通过CHANGE MASTER TO语句来配置它要连接的主服务器的ip地址,日志文件名称和该日志里面的位置(这些信息存储在主服务器的数据库里)

配置主从同步的基本步骤

有很多种配置主从同步的方法,可以总结为如下的步骤:

(1) 在主服务器上,必须开启二进制日志机制和配置一个独立的ID
(2) 在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号
(3) 在开始复制进程前,在主服务器上记录二进制文件的位置信息
(4) 如果在开始复制之前,数据库中已经有数据,就必须先创建一个数据快照(可以使用mysqldump导出数据库,或者直接复制数据文件)
(5) 配置从服务器要连接的主服务器的IP地址和登陆授权,二进制日志文件名和位置

mysq支持的复制类型

基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。
基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制复制的工作过程

在每个事务更新数据完成之前,master在二进制日志记录这些改变。写入二进制日志完成后,master通知存储引擎提交事务。
Slave将master的binary log复制到其中继日志。首先slave开始一个工作线程(I/O),I/O线程在master上打

开一个普通的连接,然后开始binlog dump process。binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件,I/O线程将这些事件写入中继日志。
Sql slave thread(sql从线程)处理该过程的最后一步,sql线程从中继日志读取事件,并重放其中的事件而更新slave数据,使其与master中的数据一致,只要该线程与I/O线程保持一致,中继日志通常会位于os缓存中,所以中继日志的开销很小。

mysql主从同步的原理很简单,从库生成两个线程,一个I/O线程,一个SQL线程;i/o线程去请求主库 的binlog
(二进制日志),并将得到的binlog日志写到relay log(中继日志) 文件中;主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;

SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。

读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也
实现了数据库性能的优化,以及提升了服务器安全。
**

配置主服务器

vim /etc/my.cnf

server_id=168
log_bin=master

#设为1当然是最安全的,但性能也是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能

innodb_flush_log_at_trx_commit=2

#开启binlog 志同步功能
sync_binlog=1
#重启mysql

/etc/init.d/mysqld restart

#授权从服务器的执行权限

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* to 
'repl'@'192.168.118.171' IDENTIFIED BY 'repl';

flush tables with read lock;

#显示主服务器状态

show master status;

配置从服务器

vim /etc/my.cnf

server-id=171

进入mysql mysql -uroot -p

stop slave;
#注意:master_log_file='master.000002',master_log_pos = 584和上面截图中匹配

CHANGE MASTER TO master_host = '192.168.118.170',
master_port = 3306,master_user='repl',master_password=
'repl',master_log_file='master.000002',master_log_pos = 584;

start slave;

主从同步延迟问题:

架构方面
1.业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。
2.单个库读写分离,一主多从,主写从读,分散压力。这样从库压力比主库高,保护主库。
3.服务的基础架构在业务和mysql之间加入memcache或者Redis的cache层。降低mysql的读压力。
4.不同业务的mysql物理上放在不同机器,分散压力。
5.使用比主库更好的硬件设备作为slave
总结,mysql压力小,延迟自然会变小。

硬件方面
1.采用好服务器,比如4u比2u性能明显好,2u比1u性能明显好。
2.存储用ssd或者盘阵或者san,提升随机写的性能。
3.主从间保证处在同一个交换机下面,并且是万兆环境。
总结,硬件强劲,延迟自然会变小。一句话,缩小延迟的解决方案就是花钱和花时间。

mysql主从同步加速

1、sync_binlog在slave端设置为0
2、–logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。
3、直接禁用slave端的binlog
4、slave端,如果使用的存储引擎是innodb,innodb_flush_log_at_trx_commit = 2

Logo

更多推荐