了解主从复制原理
一,前期准备
1,VM虚拟机 (安装可参考:https://www.cnblogs.com/yoyoblogs/p/10942257.html,https://blog.csdn.net/tsundere_x/article/details/104263100)
2,安装centos7(镜像下载参考:https://pan.baidu.com/s/1XIf9lAxarLtVHHUqaE1LKQ 提取码:wfxe,如失效,可自行下载其他)
3,ftp 连接工具(也可在虚拟机机终端中操作,就是麻烦一些)
4,准备两台服务器 ,参照1中克隆步骤(我的示例服务器是 127(主) 128(从) )
5,下载对应的mysql安装文件(我示例装的是5.7.29版本.下载地址:https://dev.mysql.com/downloads/mysql/)
二:环境安装操作
1, 1,2步骤顺利完成安装,安装好vmware并在其下安装好centos7后,我尝试ssh端连接不上.ping centos 的IP地址,出现如下错误:
可参考:https://blog.csdn.net/A_jungle/article/details/80285147 进行处理,没有此错误,自动跳过此步骤
2,查看是否安装mysql : rpm -qa | grep -i mysql
接下来在服务器中查找是否有相关的mysql包文件 :find / -name mysql ,为了不影响后续安装mysql的操作 将查询出来的文件删除,三个文件可同时删除,记住要留空格额.在运行find / -name mysql查看是否有相关的mysql包文件.另外一台服务器同理操作.
3,接下来将下载好的mysql包解压上传到服务器(另外一台服务器同理操作)
4,接下来进行 mysql 服务端和客户端的安装(另外一台服务器同理操作)
安装服务端: rpm -ivh mysql-community-server-5.7.29-1.el7.x86_64.rpm --force --nodeps
安装客户端:rpm -ivh mysql-community-client-5.7.29-1.el7.x86_64.rpm --force --nodeps
5,安装成功以后进行连接数据库 mysql -uroot -p 这个时候肯定是不知道密码的,点击enter进行下一步是会有一个报错的.接下来我们可以对/etc/my.cnf进行编辑跳过授权重置mysql密码,skip-grant-tables ##追加此行,跳过权限表.保存文件:wq!.重启mysql 服务: service mysqld restart.可不修改密码直接进行下一步操作.(另外一台服务器同理操作),实际应用一定要设置密码保证安全额.
接下来修改密码参考 https://blog.csdn.net/hdyebd/article/details/89153934;最后如果还是无法连接报错:ERROR 1820 (HY000): Unknown error 1820 的话进行如下操作:
需要修改两个全局参数:
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
mysql> set password=password("mysql");
Query OK, 0 rows affected, 1 warning (0.00 sec)
.三:主从服务器配置
1,为了主从复制,创建数据库:create database demo;
2,编辑主服务器,修改配置文件: vi /etc/my.cnf
添加如下配置
#日志文件的名字(可自定义为自己的)
log_bin=master-a-bin
#日志文件的格式
binlog-format=ROW
#服务器的id 一定要是唯一的值
server-id=1
对应需要实现主从复制的数据库(根据自己的数据库进行编辑)
binlog_do_db=demo
3,配置完之后登陆主服务器数据库给从服务器授权:grant replication slave on *.* to 'root'@'192.168.68.%' identified by 'root';然后刷新权限: flush PRIVILEGES;
4,编辑从服务器
修改配置文件: vi /etc/my.cnf
添加如下配置
#日志文件的名字(可自定义为自己的)
log_bin=master-a-bin
#日志文件的格式
binlog-format=ROW
#服务器的id 一定要是唯一的值
server-id=2
保存重启主从服务器 : service mysqld restart
5,验证主从复制是否成功
进入mysql服务器,查看主服务器的状态:show master status;
6,登陆从服务器并且设置主从复制的日志和偏移量:
change master to master_host='192.168.68.127',master_port=3306,master_use
r='root',master_password='root',master_log_file='master-a-bin.000001',master_log
_pos=154;
7,启动slave的数据同步:start slave;
查看slave的状态:show slave status\G;
使用数据库连接工具测试连接是否成功:
我这里是可以通过数据库连接工具连接成功的,如果有连接不成功报错的:以下三点原因进行排查
1,防火墙 2,3306端口未开放 3,未授权
无论能不能连接成功都要进行授权操作,在主服务器进行将权限授权给客户端:grant replication slave on *.* to 'root'@'%' identified by 'root' with grant option;这时候会报一个1819的错,这个报错的主要原因是数据库对于密码的要求.我这里密码root是纯字母.不符合数据库的密码要求.可以通过修改配置文件修改密码验证的规则:
set global validate_password_length=1;
set global validate_password_policy=0;
这样的话纯字母密码就可以通过密码验证了.再次运行grant replication slave on *.* to 'root'@'%' identified by 'root' with grant option;就运行ok了
然后在主服务器上demo数据库中新建一个表,我的是Student表,建表自行百度
登陆从服务器查看是否进行主从复制了 ,Student表在从服务器中也存在了.
往主服务器Student中插入几条数据在从服务器中也可以同步复制过去,完美.
到此主从复制就已经结束了.希望能帮到大家.读写分离的实现是一定基于主从复制的,下个文章写读写分离.