MYSQL5.7.23主从安装

目录

环境... 2

Mysql安装... 2

mysql主目录处理... 2

主目录权限处理... 3

创建配置文件及相关目录... 3

安装和初始化数据库... 4

主从配置... 6

创建数据库... 6

master机和slave机的相关配置... 7

1、修改master机器中mysql配置文件... 7

2、修改slave机中mysql配置文件... 7

(3)设置Slave复制... 9

(4)启动Slave. 9

(5)测试主从服务器是否能同步... 10

主从不同步了解决办法... 11

pt-table-checksum 和 pt-table-sync. 12

环境

        主机: master操作系统:centos 6.8 64位

                   IP:192.168.0.1

                   MySQL版本:5.7.23

        从机: slave操作系统:centos 6.8 64位

                   IP:192.168.0.2

                   MySQL版本:5.7.23

Mysql安装

解压到当前目录:

tar -xzvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz

 mysql主目录处理 

在tmp目录下移动文件到/usr/local/下并改名为mysql,在mysql目录下建data目录(可根据实际情况指定目录位置如/data

 主目录权限处理

查看组和用户情况

cat /etc/group | grep mysql
cat /etc/passwd |grep mysql

创建mysql组和mysql用户

 创建配置文件及相关目录

修改配置文件:/etc/my.cnf,配置不对的话,后面初始化不全,会拿不到默认密码。

vim /etc/my.cnf

修改内容:

[mysqld]

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

port = 3306

socket=/tmp/mysql.sock



symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/tmp/mysqld/mysqld.pid

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

[client]

default-character-set=utf8



[mysql]

default-character-set=utf8



[mysqld]

log-bin=mysql-bin

binlog-format=ROW

server_id=1

max_connections=1000



init_connect='SET collation_connection = utf8_unicode_ci'

init_connect='SET NAMES utf8'

character-set-server=utf8

collation-server=utf8_unicode_ci

skip-character-set-client-handshake

:wq! 保存退出。

创建文件/tmp/mysql.sock:设置用户组及用户,授权

cd /tmp

touch /tmp/mysql.sock

chown mysql:mysql /tmp/mysql.sock

chmod 755 /tmp/mysql.sock

 

 创建文件/tmp/mysqld/mysqld.pid:

mkdir -p /tmp/mysqld

touch /tmp/mysqld/mysqld.pid

chown -R mysql:mysql /tmp/mysqld

chmod 755 /tmp/mysqld/mysqld.pid

 

 创建文件/var/log/mysqld.log:

touch /var/log/mysqld.log

chown -R mysql:mysql /var/log

chmod 755 /var/log/mysqld.log

 安装和初始化数据库

进入bin目录:

cd /usr/local/mysql/bin/

初始化数据库:

./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

 安全启动:

./mysqld_safe --user=mysql &

 是否启动成功,可以通过查看mysql进程,ps -ef | grep mysql

 默认密码在mysqld.log日志里, 找到后保存到安全的地方:

cat /var/log/mysqld.log

 其中root@localhost: 后面的就是默认密码,后面登录用.(如果找不到可能默认是空,登录时密码直接回车,否则可能安装有问题)

进入bin目录:

cd /usr/local/mysql/bin/

登录mysql:

./mysql -u root -p

拷贝或者输入mysqld.log中获得的默认密码,即可进入mysql命令客户端。

但是,若输入相关命令,则会提示你修改用户密码(注意后面一定要加;)。

show databases;

密码修改

mysql> set password=password("xxxxxxxxxxx");

设置远程登录权限

mysql>grant all privileges on *.* to 'root'@'%' identified by ' xxxxxxxxxxx ';

 立即生效:

mysql> flush privileges;

退出quit 或者 exit;

mysql> quit;

至此,mysql安装流程已结束。

开机服务启动设置:

把support-files/mysql.server 拷贝为/etc/init.d/mysql:

cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
若没有,则把mysql注册为开机启动的服务,然后在进行查看

chkconfig --add mysql

chkconfig mysql on

 主从配置

创建数据库

分别登录master机和slave机的mysql:mysql –u root –p

创建数据库:create database eraisuat;

master机和slave机的相关配置

1、修改master机器中mysql配置文件

vi /etc/my.cnf

在[mysqld]配置段添加如下字段

server-id=1

log-bin=mysql-bin

log-slave-updates=1

binlog-do-db=eraisuat  #需要同步的数据库,如果没有本行表示同步所有的数据库

binlog-ignore-db=mysql  #被忽略的数据

在master机上为slave机添加一同步帐号

 MariaDB[(none)]>grant replication slave on *.* to 'repl'@'192.168.0.2' identified by 'xxxxxxxxxxxx';

 MariaDB[(none)]>flush  privileges;

 重启master机的mysql服务:service mysqld restart

 用show master status 命令看日志情况

通过该命令获得File和Position,在slave中有用 。注:基准这里的“mysql-bin.000004”和“154”,在下面 “(3)设置Slave复制”的配置中会用到

2、修改slave机中mysql配置文件

(1)修改slave机器中mysql配置文件my.cnf,该文件在/etc目录下

同样在[mysqld]字段下添加如下内容

Server_id=2

log-bin=mysql-bin

relay-log=mysql-relay-bin

log-slave-updates=1

replicate-do-db=cmxt

replicate-do-db=cmxt_log

replicate-do-db=mysql

slave-parallel-type=LOGICAL_CLOCK    #并行模式

slave-parallel-workers=16            #并行数

master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_recovery=ON

replicate-do-db=repl #要同步的数据库,不写本行表示同步所有数据库

然后重启slave机的mysql:service mysqld restart

(2)在slave机上验证对主机连接

mysql –h192.168.0.2 -urepl –pxxxxxxxx

MariaDB[(none)]>show grants for repl@192.168.0.2;

 (3)设置Slave复制

CHANGE MASTER TO MASTER_HOST='192.168.0.1',

MASTER_USER='repl',

MASTER_PASSWORD='xxxxxxxxxxxxxxx',

MASTER_PORT=3306,

MASTER_LOG_FILE='mysql-bin.000004',

MASTER_LOG_POS=154,

MASTER_CONNECT_RETRY=10;

(4)启动Slave

 

 

运行SHOW SLAVE STATUS查看输出结果:

主要查看Slave_IO_Running和Slave_SQL_Running 两列是否都为YES

(5)测试主从服务器是否能同步

在主服务器上面新建一个表,必须在repl数据下

mysql> use repl

Database changed

mysql> create table test(id int,name char(10));

Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values(1,'zaq');

Query OK, 1 row affected (0.00 sec)

mysql> insert into test values(1,'xsw');

Query OK, 1 row affected (0.00 sec)

mysql> select * from test;

+------+------+
| id    | name |
+-------+------+
|    1  | zaq  |
|    1  | xsw  |
+-------+------+

2 rows in set (0.00 sec)

在从服务器查看是否同步过来

mysql> use repl;

Database changed

mysql> select * from test;

+------+------+
| id   | name |
+------+------+
|    1 | zaq  |
|    1 | xsw  |
+------+------+

2 rows in set (0.00 sec)

说明已经配置成功

主从不同步了解决办法

方法一:忽略错误后,继续同步
  该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况
  解决:
    stop slave; #表示跳过一步错误,后面的数字可变
    set global sql_slave_skip_counter =1;
    start slave;
  之后再用mysql> show slave status\G 查看:
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes

方式二:重新做主从,完全同步
  该方法适用于主从库数据相差较大,或者要求数据完全统一的情况
  解决步骤如下:
    1.先进入主库,进行锁表,防止数据写入
    使用命令:
    mysql> flush tables with read lock;
    注意:该处是锁定为只读状态,语句不区分大小写
    2.进行数据备份
      #把数据备份到mysql.bak.sql文件
      mysqldump -uroot -p -hlocalhost > mysql.bak.sql
      这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者python脚本,都比较方便,确保数据万无一失
    3.查看master 状态
      

mysql> show master status;
+-------------------+----------+--------------+-------------------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB              |
+-------------------+----------+--------------+-------------------------------+
| mysqld-bin.000001 | 3260     |              | mysql,test,information_schema |
+-------------------+----------+--------------+-------------------------------+



    4.把mysql备份文件传到从库机器,进行数据恢复
      #使用scp命令
      [root@server01 mysql]# scp mysql.bak.sql root@192.168.128.101:/tmp/
    5.停止从库的状态
      mysql> stop slave;
    6.然后到从库执行mysql命令,导入数据备份
      mysql> source /tmp/mysql.bak.sql
    7.设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项
      change master to master_host = '192.168.128.100', master_user = 'rsync', master_port=3306, master_password='', master_log_file = 'mysqld-bin.000001', master_log_pos=3260;
    8.重新开启从同步
      mysql> start slave;
    9.查看同步状态
      mysql> show slave status\G 查看:
      Slave_IO_Running: Yes
      Slave_SQL_Running: Yes

           10.主库解锁

    mysql> unlock tables;

pt-table-checksum 和 pt-table-sync

  这个两个软件也是很方便,大家可以去了解一下  

  pt-table-checksum:在主(master)上通过执行校验的查询对复制的一致性进行检查,对比主从的校验值,从而产生结果。DSN指向的是主的地址,该工具的退出状态不为零,如果发现有任何差别,或者如果出现任何警告或错误,更多信息请查看官方资料。
  pt-table-sync: 高效的同步MySQL表之间的数据,他可以做单向和双向同步的表数据。他可以同步单个表,也可以同步整个库。它不同步表结构、索引、或任何其他模式对象。所以在修复一致性之前需要保证他们表存在。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楚枫默寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值