mysql主从部署

上一篇 / 下一篇  2020-12-21 14:36:08 / 个人分类:mysql

一、主、从节点分别准备好安装包,安装数据库
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;

待更新

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar