Mysql 主从同步

mysql主从同步

  • 主机win10
  • 从机centos7

1、虚拟机中安装mysql

网盘链接:
https://pan.baidu.com/s/1XL5k1y9nmMReFpbaF-EAGA 
提取码:yyds 
  • 解压到 /usr/local/
tar -xvf mysql-8.0.12-linux-glibc2.12-x86_64.tar.xz
  • 改名为mysql

  • 进入到/usr/local目录下,创建用户和用户组并授权
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql ./
  • 在/usr/local/msyql目录下,创建data文件夹

  • 初始化数据库 要记住这一步生成的随机密码,之后要用
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
  • 修改/usr/local/mysql当前目录得用户
chown -R root:root ./
chown -R mysql:mysql data

  • 创建my.cnf 文件
[root@localhost mysql]# cd support-files/
[root@localhost support-files]# touch my-default.cnf
[root@localhost support-files]# chmod 777 ./my-default.cnf
[root@localhost support-files]# ll
总用量 20
-rwxrwxrwx. 1 root root     0 1月  21 18:46 my-default.cnf
-rwxr-xr-x. 1 root root  1061 9月  20 20:08 mysqld_multi.server
-rwxr-xr-x. 1 root root  2048 9月  20 20:08 mysql-log-rotate
-rwxr-xr-x. 1 root root 10576 9月  20 20:08 mysql.server
[root@localhost support-files]# cp my-default.cnf /etc/my.cnf 
cp:是否覆盖"/etc/my.cnf"? yes
  • 配置my.cnf
vi /etc/my.cnf
[root@localhost support-files]# cat /etc/my.cnf  
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
init-connect='SET NAMES utf8'
basedir=/usr/local/mysql              #根据自己的安装目录填写 
datadir=/usr/local/mysql/data     #根据自己的mysql数据目录填写
socket=/tmp/mysql.sock
max_connections=200             # 允许最大连接数
character-set-server=utf8           # 服务端使用的字符集默认为8比特编码的latin1字符集
default-storage-engine=INNODB           # 创建新表时将使用的默认存储引擎
  • 开机自启,进入/usr/local/mysql/support-files进行设置
[root@localhost support-files]# cp mysql.server /etc/init.d/mysql
[root@localhost support-files]# chmod +x /etc/init.d/mysql
  • 注册服务
[root@localhost support-files]# chkconfig --add mysql
[root@localhost support-files]# chkconfig --list mysql
 
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 
 
      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。
 
mysql          	0:关	1:关	2:开	3:开	4:开	5:开	6:关
  • 配置路径 etc/ld.so.conf 中添加 /usr/local/mysql/lib

  • 配置环境变量 vi /etc/profile
//添加如下内容
#MYSQL ENVIRONMENT
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
  • 更新环境变量
source /etc/profile
  • 启动mysql服务
service mysql start
  • 登录 密码为上面初始化时生成的随机密码
mysql -u root -p

  • 修改密码
mysql> alter user 'root'@'localhost' identified by 'root123';
Query OK, 0 rows affected (0.02 sec)
  • 开启允许远程登录
mysql> use mysql;

mysql> select host, user, authentication_string, plugin from user;#查看用户信息

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root'; #创建任意ip连接root用户

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; #授权root用户可以远程登陆

mysql> flush privileges;#立即生效

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root123';#修改'root'@'%'用户密码
 
mysql> FLUSH PRIVILEGES;#立即生效
 
mysql> exit;#退出

[root@localhost ~]# service mysql restart  #重启mysql服务
Shutting down MySQL.. SUCCESS! 
Starting MySQL.. SUCCESS! 
[root@localhost ~]# 
  • 防火墙开放3306端口
[root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent  #开放3306端口
success
[root@localhost ~]# systemctl restart firewalld.service  #重启防火墙
[root@localhost ~]# firewall-cmd --list-ports  #查看是否开放成功
3306/tcp



2、主从配置

主机(win10)

mysql> CREATE USER ‘repl’@‘123.57.44.85’ IDENTIFIED BY ‘slavepass’;#创建用户

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl’@‘123.57.44.85’;#分配权限

mysql> flush privileges; #刷新权限
  • 修改my.ini
[mysqld]
server-id=1
log-bin=mysql-bin
log-bin-index=mysql-bin.index
binlog-do-db=test
  • 重启数据库

  • 查看主机设置

show master status;


从机 (centos7)

  • 修改 /etc/my.cnf
server-id=2
log-bin=mysql-bin
log-bin-index=mysql-bin.index
replicate-do-db=test   #要同步的数据库
  • 重启数据库

  • 连接mysql ,连接主库 (配置的这些参数都是在上面设置过的)

mysql> change master to master_host='192.168.243.1', master_user='repl', master_password='slavepass',master_log_file='mysql-bin.000005', master_log_pos=155;
  • 从机开启同步
mysql> start slave;
  • 查看同步状态
msyql> show slave status \G

当两个状态都是Yes时,说明主从同步设置成功。

Slave_IO_Running 是 NO 的原因可能是:master_log_file设置不对,或者是master_log_pos设置不对。

Slave_SQL_Running 是 NO 的原因可能是:在从库上进行写操作,导致主从数据库不同步,可以进行手动同步。

注:test 就是要同步的数据库,最初应该保证两个数据库初始是一致的。



3、测试

  • 在主库中新建表,并添加一行数据

  • 查看从库


参考链接:https://blog.csdn.net/weixin_38898423/article/details/103473895

posted @ 2021-08-23 09:12  随性0528  阅读(83)  评论(0)    收藏  举报