◆在每个事物更新数据完成之前,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的缓存中, 所以中继日志的开销很小。
主机 操作系统 IP地址 主要软件 amoeba centos-7.6-X86_64 20.0.0.19 amoeba-mysql-3.0.5-RC-distribution.zip jdk-8u144-linux-x64.tar.gz
Master centos-7.6-X86_64 20.0.0.20 mysql-boost-5.7.20.tar.gz
Slave1 centos-7.6-X86_64 20.0.0.21 mysql-boost-5.7.20.tar.gz
Slave2 centos-7.6-X86_64 20.0.0.22 mysql-boost-5.7.20.tar.gz
###master、slave1、slave2#### 关闭防火墙、关闭核心防护,并且配置本地yum源
软件选择:xshell
1、在主机Master 搭建时间同步服务器NTP 登录到20.0.0.20
yum -y install ntp vi /etc/ntp.conf //最后面添加这二行 server 127.127.1.0 fudge 127.127.1.0 stratum 8
重新启动ntp服务器和设置开机自启
service ntpd restart systemctl restart ntpd systemctl enable ntpd
2、在从服务器(1) 上配置NTP同步 登录到20.0.0.21
yum -y install ntpdate ntpdate 20.0.0.20
crontab -e #建立一次性计划任务
添加:*/2 * * * * /usr/sbin/ntpdate 20.0.0.20 >> /var/log/ntpdate.log
systemctl restart crond systemctl enable crond touch /var/log/ntpdate.log tail -f /var/log/ntpdate.log //动态查看更新日志文件
安装部分省略!
计划任务里添加
查看日志文件
3、在从服务器 (2) 上配置NTP同步 登录到20.0.0.22
和从服务器(1)一样的配置,这里就省略了。。。
##Master、slave1、slave2 安装MySQL数据库##
!!如果想看mysql的配置文件的意思,可以看我之前的lamp架构,上面有解释
【安装 MySQL 服务】 1、安装Mysql环境依赖包 [root@localhost ~]# yum -y install gcc-c++ gcc make ncurses ncurses-devel bison cmake
2、创建运行用户 useradd -s /sbin/nologin mysql
3、编译安装 ###上传mysql-boost-5.7.20.tar.gz到opt目录下### cd /opt tar xzvf mysql-boost-5.7.20.tar.gz cd /opt/mysql-5.7.20/ [root@localhost mysql-5.7.20]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DSYSCONFDIR=/etc -DSYSTEMD_PID_DIR=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_BOOST=boost -DWITH_SYSTEMD=1
[root@localhost mysql-5.7.20]# make && make install
4、数据库目录进行权限调整 [root@localhost mysql-5.7.20]#chown -R mysql:mysql /usr/local/mysql/
5、调整配置文件 [root@localhost mysql-5.7.20]#vi /etc/my.cnf [client] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock
[mysql] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
chown mysql:mysql /etc/my.cnf
6、设置环境变量 echo ‘PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH’ >> /etc/profile echo ‘export PATH’ >> /etc/profile source /etc/profile
7、初始化数据库 cd /usr/local/mysql/
bin/mysqld –initialize-insecure –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data
cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
8、数据库开启自启、 关闭、状态 systemctl enable mysqld systemctl start mysqld systemctl stop mysqld systemctl status mysqld netstat -anpt | grep 3306
9、设置Mysql密码 mysqladmin -u root -p password //设置的密码为abc123
10、登录数据库 mysql -u root -p
4.登录Master主服务器配置 20.0.0.20 vi /etc/my.cnf #在原来server-id = 1的地方修改成11
server-id = 11 log_bin = master-bin //主服务器日志文件 log-slave-updates = true //从服务器更新二进制日志
systemctl restart mysqld //重启一下数据库
5.登录Master数据库 给从服务器授权 [root@localhost mysql]# mysql -uroot -p
mysql>grant replication slave on . to ‘myslave’@‘20.0.0.%’ identified by ‘abc123’;
//开启同步,允许对方使用所有的数据库和所有的表通过myslave用户,地址在20.0.0.网段,使用密码abc123进行登录。
mysql>flush privileges; //刷新 mysql>show master status; //查看master数据库状态
输入密码,进入数据库
6.登录 从服务器 (1) 配置 20.0.0.21
[root@localhost mysql]# vi /etc/my.cnf server-id = 22 relay-log = relay-log-bin //主服务器上同步日志文件记录到本地 relay-log-index = slave-relay-bin.index //定义relay-log的位置和名称
systemctl restart mysqld
7.在从服务器 (1) 配置同步
[root@localhost mysql]# mysql -uroot -p
mysql> change master to master_host=‘20.0.0.20’,master_user=‘myslave’,master_password=‘abc123’,master_log_file=‘master-bin.000001’,master_log_pos=1653;
mysql> start slave; //开启同步
mysql> show slave status\G //以竖向显示slave的状态,横向容易错乱
从服务器 (2) 20.0.0.22也是同样的操作,最后要看到这两个线程处于开启状态!!
登录20.0.0.20 [root@localhost mysql]# mysql -uroot -p mysql> create database school; mysql> show databases;
登录20.0.0.21 [root@localhost mysql]# mysql -uroot -p mysql> show databases;
登录20.0.0.22 [root@localhost mysql]# mysql -uroot -p mysql> show databases;
验证成功!