1、分别装好centos7.3系统
略
2、分别卸载mariadb
[root@mysql01 datamysql]# rpm -qa|grep mari
[root@mysql01 datamysql]# rpm -e --nodeps mariadb-embedded-devel-5.5.64-1.el7.x86_64 mariadb-5.5.64-1.el7.x86_64 mariadb-test-5.5.64-1.el7.x86_64 mariadb-server-5.5.64-1.el7.x86_64 mariadb-embedded-5.5.64-1.el7.x86_64 mariadb-devel-5.5.64-1.el7.x86_64 mariadb-bench-5.5.64-1.el7.x86_64 mariadb-libs-5.5.64-1.el7.x86_64
3、分别准备好安装包
[root@mysql01 datamysql]# ll
total 196820
-rw-r--r-- 1 root root 25090196 Nov 5 14:01 mysql-community-client-5.7.20-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 278300 Nov 5 14:01 mysql-community-common-5.7.20-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 2238604 Nov 5 14:01 mysql-community-libs-5.7.20-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 2115892 Nov 5 14:01 mysql-community-libs-compat-5.7.20-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 171597916 Nov 5 14:01 mysql-community-server-5.7.20-1.el7.x86_64.rpm
4、分别开始安装
[root@mysql01 datamysql]# rpm -ivh mysql-community-common-5.7.20-1.el7.x86_64.rpm
[root@mysql01 datamysql]# rpm -ivh mysql-community-libs-5.7.20-1.el7.x86_64.rpm
[root@mysql01 datamysql]# rpm -ivh mysql-community-libs-compat-5.7.20-1.el7.x86_64.rpm
[root@mysql01 datamysql]# rpm -ivh mysql-community-client-5.7.20-1.el7.x86_64.rpm
[root@mysql01 datamysql]# rpm -ivh mysql-community-server-5.7.20-1.el7.x86_64.rpm
5、分别备份mysql配置文件
[root@mysql01 datamysql]# cp -a /etc/my.cnf /etc/my.cnf_bak
6、分别配置mysql免密登录
在/etc/my.cnf中,[mysqld]下面加入
skip-grant-tables
7、分别启动mysql
service mysqld start
8、分别进入mysql操作
[root@mysql01 datamysql]# mysql -u root -p
#清空缓存
mysql>flush PRIVILEGES;
#设置root用户密码
mysql>set password for 'root'@'localhost' = password('mysql01');
#允许所有主机通过root用户登录
mysql>grant all privileges on *.* to 'root'@'%' identified by 'mysql01' with grant option;
mysql>flush PRIVILEGES;
#修改密码策略,可省略
mysql>set global validate_password_length=6;
mysql>set global validate_password_policy=0;
mysql>flush PRIVILEGES;
#去掉mysql免密登录,在/etc/my.cnf中,对“skip-grant-tables”进行注释
#skip-grant-tables
9、分别重启mysql
service mysqld restart
二、配置主从复制
1、修改主服务器master
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=90 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
2、修改从服务器slave:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[不是必须]启用二进制日志
server-id=241 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
3、分别重启主从mysql
service mysqld restart
4、在主服务器上建立帐户并授权slave
mysql>GRANT REPLICATION SLAVE ON *.* to 'mysql01'@'%' identified by 'mysql01';
5、在主服务器允许所有主机通过mysql01用户登录
grant all privileges on *.* to 'mysql01'@'%' identified by 'mysql01';
6、在主服务器对进行锁表(innodb引擎的可以不锁表,反之要上锁)
flush tables with
read
lock;
注:查看mysql引擎
show variables like '%storage_engine%';
7、使用mysql01登录主服务器的mysql,查询master的状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 4661 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
8、使用mysql01登录主服务器的导出数据库
mysqldump -h192.168.0.55 -P3654 -umysql1215 -pMy15 --all-databases > /opt/55.sql
9、将主服务器上导出的
sql,复制到从服务器,并导入到从服务器
scp -r root@192.168.0.55:/opt/55.sql /opt/
mysql -h192.168.0.8 -P3654 -uroot -pmysq2 < /opt/55.sql
10、配置从服务器Slave:
mysql>change master to master_host='192.168.0.55',master_user='mysql1215',master_password='My1215',master_port=3654,master_log_file='mysql-bin.000001',master_log_pos=4661;
//注意不要断开,4661数字前后无单引号。
Mysql>start slave; //启动从服务器复制功能
8、检查从服务器复制功能状态:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.14 //主服务器地址
Master_User: mysql01 //授权帐户名,尽量避免使用root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 4661 //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: mysql02-relay-bin.000006
Relay_Log_Pos: 585
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
以上操作过程,主从服务器配置完成。
1、使用msyql01用户登录主服务器,建立数据库,并在这个库中建表插入一条数据:
mysql> create database test01;
mysql> use test01;
mysql> create table hi_tb(id int(3),name char(10));
mysql> insert into hi_tb values(001,'hello');
2、从服务器Mysql查询,可以看到在主服务器建立的库、表、数据:
mysql> show databases;
mysql> use test01;
mysql> select * from hi_tb;
四、问题解决
注:主从数据库,从库只能查询,不能修改
错误回放:
从库修改了a数据,然后主库修改A数据,从库同步信息报错如下:
Last_SQL_Error: Could not execute Delete_rows event on table test01.hi_tb; Can't find record
解决方法1:
解决方法:
master要修改一条
记录,而slave上该数据已被改动,找不到该数据报错,这种情况可以手动同步数据,然后做跳过处理。
stop slave;
set global sql_slave_skip_counter=1;//表示跳过一步
start slave;
待更新