MySQL5.7主从复制配置,数据同步

MySQL5.7主主复制配置
主机1IP:172.16.1.206 主机2IP:172.16.1.226
一、首先安装MySQL 5.7 1、卸载两台主机系统中已经有的mysql相关软件包 rpm -qa | grep -i mysql yum remove mysql(相关软件包名称) -y
2、分别在两台主机系统中执行以下命令 在http://dev.mysql.com/downloads/repo/yum/站点下载mysql57-community-release-el6-8.noarch rpm -ivh mysql57-community-release-el6-8.noarch.rpm  yum -y install mysql.x86_64 mysql-server.x86_64 mysql-devel.x86_64
3、分别在两台主机上执行以下语句,初始化
mkdir /home/mysql mysqld –initialize-insecure –user=mysql –datadir=/home/mysql
备注:     如果你用 –initialize 初始化data目录,请用如下命令登录服务     mysql -u root -p     执行上面命令,会提示输入密码,输入随机生成的密码即可。     如果你不知道这个随机密码,请查看error log文件查找这个随机密码。              如果用 –initialize-insecure 初始化data目录,请用root用登录,并不需要输入密码就可以登录,如下命令:     mysql -u root –skip-password      Mysql5.7忘记root密码及mysql5.7修改root密码的方法的相关资料 a、关闭正在运行的 MySQL :service mysql stop b、运行:mysqld_safe –skip-grant-tables & c、为了安全可以这样禁止远程连接:mysqld_safe –skip-grant-tables –skip-networking &     d、使用mysql连接server:mysql -p e、更改密码: mysql> update mysql.user set authentication_string=password(‘shopym’) where user=’root’ and Host = ‘localhost’;     
特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了 而是将加密后的用户密码存储于authentication_string字段
4、分别登录修改主机1、主机2的mysql密码 输入mysql回车,进入mysql环境 set password = password (‘shopym’); flush privileges;
5、在主机1(192.168.1.2)的/etc/my.cnf中配置以下内容 [mysqld] datadir=/home/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid server-id = 1 auto-increment-increment = 2 auto-increment-offset = 1
explicit_defaults_for_timestamp = 1 character_set_server=utf8 interactive_timeout = 57600 log-bin = mysql-bin
expire-logs-days = 100 replicate-do-db  = wang                 #需要同步的数据库 binlog-ignore-db  = mysql binlog-ignore-db  = information_schema
slave-skip-errors=all log-slave-updates symbolic-links=0  skip-name-resolve
6、在主机1(192.168.1.4)的/etc/my.cnf中配置以下内容 [mysqld] datadir=/home/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid server-id = 2 auto-increment-increment = 2 auto-increment-offset = 2
character_set_server=utf8 interactive_timeout = 57600 log-bin = mysql-bin expire-logs-days = 100
replicate-do-db = wang                   #需要同步的数据库 binlog-ignore-db = mysql binlog-ignore-db = information_schema
slave-skip-errors=all log-slave-updates symbolic-links=0 skip-name-resolve
备注:主机1和主机2都只有server-id不同和 auto-increment- offset不同 auto-increment-offset是用来设定数据库中自动增长的起点的,回为这两能 服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避 免两台服务器数据同步时出现主键冲突replicate-do-db 指定同步的数据库, 我们只在两台服务器间同步shoym数据库 另:auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2

7、分别重启主机1,主机2的mysql服务,使配置生效 service mysqld restart
8、在主机1(192.168.1.2)上创建数据库和表并插入数据 mysql -uroot -pwclwcw create database wang; use wang; create table wclwcw(id int,name varchar(100)); insert into wclwcw value (1,’tom’)
9、相互授权 在主机1(172.16.1.206)上 GRANT REPLICATION SLAVE ON *.* TO ‘shopym’@’172.16.1.226’ IDENTIFIED BY ‘shopym’; flush privileges;
在主机2(172.16.1.226)上 GRANT REPLICATION SLAVE ON *.* TO ‘shopym’@’172.16.1.206’ IDENTIFIED BY ‘shopym’     flush privileges;
10、互告bin-log信息 a、在主机1(192.168.1.2)上 mysql> show master status; +——————+———-+————–+————————–+ | File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | +——————+———-+————–+————————–+ | mysql-bin.000006 |      106 |      | mysql,information_schema | +——————+———-+————–+————————–+
b、在主机2(192.168.1.4)上 mysql> show master status; +——————+———-+————–+————————–+ | File     | Position | Binlog_Do_DB | Binlog_Ignore_DB | +——————+———-+————–+————————–+ | mysql-bin.000008 |      192 |      | mysql,information_schema | +——————+———-+————–+————————–+
c、在主机1(172.16.1.206)上 mysql> change master to master_host=’172.16.1.226′,master_user=’shopym’,master_password=’shopym’,master_log_file=’mysql-bin.000008′,master_log_pos=120;
d、在主机2(192.168.1.226)上 mysql> change master to master_host=’172.16.1.206′,master_user=’shopym’,master_password=’shopym’,master_log_file=’mysql-bin.000014′,master_log_pos=120;
RDS 是独特的 需要这个方法 两边用GTID来数据同步
change master to master_host=’.rds.aliyuncs.com’,master_user=’0000000′,master_password=’1q2…….#’,master_auto_position=1;
show global variables like ‘gtid_purged’; 然后拿着这个value,去从库上依次 stop slave; set global gtid_purged = ‘xxx’; # xxx是你主库上查到的value。 start slave;
进过测试RDS需要先查询
set global gtid_purged =’077e9f57-b83f-11e6-844c-7cd30abff676:1-10479976,fa4f2610-b83e-11e6-844c-7cd30abff66a:1-5683819′;
要是出现: ERROR 1840 (HY000): @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty. 则需要执行: reset master;
11、在主机1、主机2两服务器都执行以下命令 mysql> start slave;
12、查看状态 主机1上(172.16.1.206) mysql> show slave statusG;
………….. 在主机2(172.16.1.206)上 mysql> show slave statusG;  …………. 当看到了两个yes,即: Slave_IO_Running: Yes Slave_SQL_Running: Yes 说明已经配置成功了,同时查看主机2中是否已经有主机1中的数据库
其他 同步数据 用test做的实验,导出将test.sql文件从1.4服务器拷贝到1.2服务器 备份数据前先锁表,保证数据一致性 mysql> FLUSH TABLES WITH READ LOCK; # mysqldump -uroot -p123456 test> /tmp/test.sql;
mysql> UNLOCK TABLES;
scp /tmp/test.sql root@192.168.1.2:/tmp
在搭建mysql master-slave复制环境时,一切都正常,但是在slave上执行:show slave statusG; 时,出现下面的状况: Slave_IO_Running: Connecting Slave_SQL_Running: Yes
一直无法进行正确的复制。查看错误日志文件显示:Connecting error_code:2003 看来是slave 没有连接上master,在 上搜索一下, 上文章大都只是指出了可能的三种错误: 1. 络不通 2. 密码不对 3. pos不对
我测试 络是可以ping通的。密码也对,pos也对。
后来想了很久,突然想起来了防火墙好像没有关闭!一检查果然。 所以第四种错误是: 4. 防火墙没有关闭。
相关命令如下: 关闭命令:  service iptables stop 永久关闭防火墙:chkconfig iptables off
两个命令同时运行,运行完成后查看防火墙关闭状态 service iptables status
另外顺便也将 selinux关闭掉: 1      vi /etc/selinux/config 2      #SELINUX=enforcing     #注释掉 3      #SELINUXTYPE=targeted  #注释掉 4      SELINUX=disabled  #增加 5      :wq  #保存,关闭。 6      shutdown -r now   #重启系统
查看SELinux的状态: getenforce 文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树数据修改插入31716 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年9月23日
下一篇 2017年9月23日

相关推荐