源码部署Mysql_5.7主从

2021年5月7日10:35:34 发表评论
摘要

【心语】选择,仅仅意味着一场马拉松赛跑的起点,一个漫漫长路的开始。而通往远方更为关键的,是接下来如何走好选择之后的路,而我们又将以什么样的姿态在走。

一、Mysql主从原理
源码部署Mysql_5.7主从
1、Mysql 主从同步是一个异步复制过程,要实现复制首选需要在Master上开启bin-log日志功能,并且整个过程还需要开启3个线程,分别是Master开启IO线程,slave开启IO线程和Sql线程。

2、在从服务器上执行slave start 从服务器上的IO 线程会通过授权的用户连接上Master,并请求Master指定的文件和位置,之后发送bin-log日志内容。
3、Master服务器接收来自slave服务器的IO线程请求后,Master服务器上的IO线程根据slave服务器发送的指定bin-log日志之后的内容,然后返回给slave端的IO线程,(返回的信息中除了bin-log日志内容外,还有本次返回的日志内容,然后在Master服务端更新的bin-log文件名以及在binlog中的下一个指定更新位置)
4、Slave的IO线程接收到信息后,将接收到的日志内容依次加到slvae端的relay-log(中继日志)文件的最末端。并将读取到的Master端的bin-log的文件名和位置记录到Master info文件中,以便在下依次读取的时候能够清楚的告诉Master。“”我需要从某个bin-log的那个位置开始往后的日志内容,请发给我“”
5、Slave的sql线程检测到relay-log中新增加了内容后,会马上解析relay-log的内容。成为在Master端真实执行时候的那些可执行的内容,并在自身执行
6、总结原理:将主服务器的bin-log日志,复制到从服务器上在执行一遍,从而达到主从数据一致
二、做主从的复制的功能
。实时灾备,用于故障切换
。读写分离,提供查询,即便主库出现锁表等情况也不会影响业务
。高可用,出现故障,实现不影响业务,业务不中断
。从库数据统计,所有的查询,数据统计等可在从库操作
。从库数据备份
三、主从部署必备条件
。主库开启bin-log日志(设置bin-log参数)
。主从server-id 不能相同
。从库服务器网络可以连通主库
四、部署步骤
两台Centos7服务两服务器
。Master:192.168.44.163
。slave:192.168.44.60
提供两种YUM安装方式
。Centos 6
yum install –y mysql-server mysql-devel mysql
。Centos 7
yum –y install mariadb-server mariadb mariadb-libs mariadb-devel
源码安装方式Master操作
。安装相关环境
[root@localhost ~]# yum -y install ncurses-devel perl perl-devel gcc gcc-c++ cmake make openssl-devel openssl
。安装boost库,Mysql5.7版本以上必须安装

[root@localhost ~]# wget –c http://mirrors.rootpei.com/mysql/boost_1_59_0.tar.gz
[root@localhost ~]# tar xf boost_1_59_0.tar.gz -C /usr/local/
。下载源码包
[root@localhost ~]# wget -c http://mirrors.rootpei.com/mysql/mysql-5.7.18.tar.gz
[root@localhost ~]# tar xf mysql-5.7.18.tar.gz
[root@localhost ~]# useradd -s /sbin/nologin mysql
[root@localhost ~]# cd mysql-5.7.18
。编译安装
[root@localhost ~]#cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_TCP_PORT=3306 \
-DWITH_READLINE=1 \
-DMYSQL_USER=mysql \
-DWITH_SSL=yes
[root@localhost mysql-5.7.18]# make && make install
源码部署Mysql_5.7主从
[root@localhost mysql-5.7.18]# mkdir -p /data/mysql
[root@localhost mysql-5.7.18]# chown -R mysql.mysql /data/mysql/
五、初始化数据库(生成空密码,生成随机密码参数--initialize)
[root@localhost mysql-5.7.18]# cd /usr/local/mysql/bin/
[root@localhost bin]# ./mysqld --initialize-insecure --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql
源码部署Mysql_5.7主从#以上Master部署完成,请在slave上执行相同的操作安装好数据库
六、修改配置文件
。Master端配置文件如下
[mysqld]
#数据存储目录
datadir = /data/mysql
#socket通信文件
socket = /tmp/mysql.sock
#使用mysql用户启动
user = mysql
#开启bin-log日志
log-bin=mysql-bin
#MYSQL服务运行的端口号
port = 3306
#开启bin-log日志
log-bin = mysql-bin
#MYSQL服务ID号
server-id = 1
#定义error错误文件
log-error = /var/log/mysqld.log
#PID文件路径
pid-file = mysqld.pid
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#设置字符集为utf8
character-set-server = utf8
[client]
default-character-set = utf8
port = 3306
socket = /tmp/mysql.sock
[mysql]
default-character-set = utf8
root@localhost bin]# ln -s /usr/local/mysql/bin/* /usr/sbin/
[root@localhost bin]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost bin]# chmod +x /etc/init.d/mysqld
[root@localhost bin]# /etc/init.d/mysqld start
源码部署Mysql_5.7主从
启动成功
七、添加开机自启
[root@localhost ~]# chkconfig --add mysqld
[root@localhost ~]# chkconfig mysqld on
[root@localhost ~]# chkconfig --list|grep mysql

源码部署Mysql_5.7主从八、Master授权配置主从
。进入到数据库 执行此授权命令
mysql> grant replication slave on *.* to tongbu@'%'identified by 'tongbu';
mysql> flush privileges;
mysql> show master status;源码部署Mysql_5.7主从Slave执行如下操作
。slave配置文件
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
#数据存储目录
datadir = /data/mysql
#socket通信文件
socket = /tmp/mysql.sock
#使用mysql用户启动
user = mysql
#server ID
server-id=2
#开启bin-log日志
log-bin=mysql-bin
#MYSQL服务运行的端口号
port = 3306
#开启bin-log日志
log-bin = mysql-bin
#定义error错误文件
log-error = /var/log/mysqld.log
#PID文件路径
pid-file = mysqld.pid
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#设置字符集为utf8
character-set-server = utf8
[client]
default-character-set = utf8
port = 3306
socket = /tmp/mysql.sock
[mysql]
default-character-set = utf8
[root@localhost bin]# /etc/init.d/mysqld start
源码部署Mysql_5.7主从
启动成功
九、配置同步
。进入slave数据库执行
mysql> change master to master_host='192.168.44.163',master_user='tongbu',master_password='tongbu',master_log_file='mysql-bin.000001',master_log_pos=591;
。启动slave
mysql> start slave;源码部署Mysql_5.7主从mysql> show slave status\G;
源码部署Mysql_5.7主从两个yes说明主从同步成功,下面我们简单测试下
。Master创建了一个数据库
mysql> create database peihh;
源码部署Mysql_5.7主从。slave 上我们查看下是否同步成功
源码部署Mysql_5.7主从
说明成功!
基础操作命令
#主从同步状态查看
mysql> show slave status\G
mysql> show processlist\G;
#启动slave
mysql> start slave;
#停止主从同步
mysql> stop slave;

  • 微信公众号
  • 这是我的微信公众号扫一扫
  • weinxin
  • 我的QQ技术群
  • 我的QQ技术群扫一扫
  • weinxin
admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: