Mysql主从复制
1.主从复制概述
MySQL主从复制是其最重要的功能之一。主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器即可充当主机,也可充当从机。MySQL主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。
2. mysql支持的复制类型
主从复制类型由binlog_format参数进行控制,推荐使用MIXED类型。
(1) 基于语句的复制(statement): 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。
(2) 基于行的复制(ROW):把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
(3) 混合类型的复制(MIXED): 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
3. 主从复制特点
MySQL复制技术有以下一些特点:
(1) 实时灾备,用于故障切换
(2) 读写分离,提供查询服务
(3) 备份,避免影响业务
(4) 异步复制,可能存在延时
4. 主从复制形式
(1) 一主一从
(2)一主多从
(3) 级联复制(主从从)
(4) 多主一从(mysql 5.7支持)
(5) 主主复制
5. 了解主从复制同步过程
(1) 从库IO进程发起主从同步,首次发送change master中记录的ID值。
(2) 主库IO进行收到请求后,更具从库发送的ID位置点,发送binlog到从库。
(3) 从库收到binlog后,IO进程进行解析,生成中继日志relay-log。
(4) 从库记录下一个binlog编号到master_info文件。
(5) SQL进程中继日志relay-log进行处理转换,写入到数据文。
(6) 从库生成binlog日志文件(如果已开启binlog)
实验环境:
主数据库:192.168.1.41 端口:3306
从数据库:192.168.1.78 端口:3306
6.主库的操作
6.1首先安装MySQL数据库命令如下:
1.useradd mysql && echo Comsys123 |passwd --stdin mysql
2.mkdir -p /u01/mysql/3306/{data,tmp,log,run}
3.yum install -y unzip
rz上传MySQL安装包,这里我用的是mysql5.6.26_noinstall.zip安装包
4.unzip mysql5.6.26_noinstall.zip -d /u01/mysql
5.chown -R mysql.mysql /u01/mysql && chmod -R 775 /u01/mysql
6.cp /u01/mysql/database/3306/* /u01/mysql/3306/
7.chown -R mysql.mysql /u01/mysql && chmod -R 775 /u01/mysql
8.echo ‘mysql_home=/u01/mysql/database’ >> /etc/profile && echo ‘export PATH=$PATH: $mysql_home/bin’ >> /etc/profile
9.source /etc/profile
10./u01/mysql/database/scripts/mysql_install_db --basedir=/u01/mysql/database --datadir=/u01/mysql/3306/data/ --user=mysql (注意这一步会报错)
#报错:/u01/mysql/database/scripts/mysql_install_db: /usr/bin/perl: bad interpreter: No such file or directory
#解决办法:yum install -y perl 和 yum -y install autoconf (yum安装完成重新执行第10步即可)
11.cp /u01/mysql/3306/mysqld /etc/init.d/mysqld
12.chkconfig --add mysqld && chkconfig mysqld on
13.chown -R mysql.mysql /u01/ && chmod -R 775 /u01/
14.service mysqld start
15.mysqladmin -uroot password ‘Comsys123’ -S /u01/mysql/3306/run/mysql.sock
#如果该步骤报错,可能是由于创建日志文件较大,阻塞了mysql.sock文件的创建,需要等待一会后,重新执行
#可以忽略该警告:Warning: Using a password on the command line interface can be insecure.
16.mysql -uroot -pComsys123 -S /u01/mysql/3306/run/mysql.sock
17.grant shutdown on . to ‘admin’@‘localhost’ identified by ‘password’;
18.grant all on . to ‘root’@’%’ identified by ‘Comsys123’ WITH GRANT OPTION;
19.flush privileges;
20.exit
到此MySQL数据库安装完成,从库的安装也如此.
6.1.2主数据库开启bin-log日志
修改/u01/myql/3306下的my.cnf配置文件,windows环境为my.ini,在[mysqld]选项内下面添加如下参数,修改后需要重启Mysql数据库.
6.1.3 主数据查看bin-log是否开启
6.1.4 主库上创建主从复制账号
1.grant replication slave on . to ‘hanyaping’@‘192.168.1.%’ identified by ‘woaini’;
2.flush privileges;
6.1.5 主库上备份MySQL
6.1.5.1设置主数据库为只读模式
1.flush table with read lock;
注意:A.窗口关闭则失效
B.锁表需要注意参数时间,过期失效。(wait_timeout 、interactive_timeout)
6.1.5.2 记录Master状态
1.show master status;
6.1.5.3 备份主数据库
新开窗口执行,不要关闭上面锁定表的窗口
1.mysqldump -uroot -pComsys123 -S /u01/mysql/3306/run/mysql.sock --events --master-data=1 -A -B -R -x -F |gzip > /u01/master_date +%F
.sql.gz
6.1.5.4 开启主数据库写功能
1.unlock tables;
6.1.5.5 将备份文件拷贝到从数据库
scp master_2019-02-28.sql.gz 192.168.1.78:/root
6.2 从服务器操作
6.2.1 从数据库修改server-id
修改my.cnf配置文件,windows环境为my.ini,在[mysqld]选项内下面添加如下参数,修改后需要重启Mysql数据库.
6.2.2从数据库恢复主库备份
gunzip master_2019-02-28.sql.gz
mysql -uroot -p < master_2019-02-28.sql
从数据库配置同步信息
mysql -uroot -p
CHANGE MASTER TO MASTER_HOST=‘192.168.1.41’, MASTER_PORT=3306,MASTER_USER=‘hanyaping’,MASTER_PASSWORD=‘woaini’,MASTER_LOG_FILE=‘mysql-bin.000003’,MASTER_LOG_POS=120;
6.2.3从数据库启动主从复制
start slave;
备注:如果要停止主从复制命令如下:
stop slave;
6.2.4 从数据库查看复制状态
查看Slave_IO_Running,Slave_SQL_Running两个进程状态是否为Yes。
查看Seconds_Behind_Master时间是否为0,则表示无同步时间差
show slave status\G
主从配置安装完成!!!