MySQL的windows安装与linux安装

Mysql主从复制

windows使用压缩包安装:

(1)配置环境变量MYSQL_HOME
(2)创建文件my.ini

[mysqld]
# set basedir to your installation path
port=3306
basedir=D:\mysql8\mysql-8.0.23-winx64
# set datadir to the location of your data directory
datadir=D:\mysql8\mysql-8.0.23-winx64\mydata\data
default-time-zone='+8:00'

(3)

mysqld --initialize --console
mysqld --install MySQL
net start MySQL
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'lzq12345678';

linux安装

0.从清华大学镜像源(https://mirrors.tuna.tsinghua.edu.cn)下载mysql
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-8.0/mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar
1.解压
tar xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar

2.安装
(方式一:分步安装。推荐)
# 删除之前残留的mysql
rpm -aq | grep mariadb 
rpm -e mariadb-libs* --nodeps(其中--nodeps是删除依赖)
rpm -e postfix* 
yum localinstall mysql-community-common… 
yum localinstall mysql-community-libs… 
yum localinstall mysql-community-client… 
yum localinstall mysql-community-server… 
rpm -ql mysql-community-server
(方式二)
yum install mysql-community-{server,client,common,libs}-* 


3.防火墙开放3306端口(非必须)
systemctl start firewalld
firewall-cmd --zone=public --permanent --add-port=3306/tcp
firewall-cmd --reload

4.修改mysql配置文件
vim /etc/my.cnf
>>>>>>
[mysqld]
bind_address = 0.0.0.0
#port=3306
default-time-zone='+8:00'
skip-name-resolve = ON
>>>>>>

5.启动mysql
systemctl start mysqld
# 查看mysql初始密码
grep 'temporary password' /var/log/mysqld.log

6.使用初始密码登录mysql
mysql -uroot -p
# 修改mysql本地登录密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'abc123!Test';
# 设置mysql远程登录
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'abc123!Test' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

---------------------------自此,数据库安装完毕----------------

7.设置mysql密码等级(非必须)
mysql> SHOW VARIABLES LIKE 'validate_password%';
mysql> set global validate_password_policy=LOW; 



8.创建mysql新用户
mysql> create user zyf@"%" identified by 'abc123!Test';
mysql> GRANT ALL privileges ON *.* TO "zyf"@"%";
mysql> FLUSH PRIVILEGES;
(用户创建、授权完毕)
mysql> use mysql
mysql> select host, user from user;

mysql> GRANT SELECT,INSERT ON *.* TO 'testUser'@'localhost' IDENTIFIED BY 'testPwd' WITH GRANT OPTION;

9.创建新数据库
mysql> create database zyfdb;
mysql> use zyfdb;
mysql> show databases;
mysql> show tables;
mysql> create table zyftest (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name 
varchar(100), create_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP);

----------------------自此,数据库新用户、新库、新表创建完毕~------------------------------
(以下忽略)
10.
dba.deploySandboxInstance(3307);

11.
dba.configureReplicaSetInstance('root@localhost:3306',{clusterAdmin: "rsadmin@localhost"});

主从复制

一、介绍

1.主机master将自己的写操作信息写到BinaryLog文件中,然后从机slaver读取这个BinaryLog,但并不是立即写入到从机的数据库中,而是写在了从机的Relay Log中。RelayLog写好之后再写入到从机中。
2.每个slave只能有一个唯一的服务器ID。

二、搭建过程

主机与从机的配置都是在my.ini(windows)或my.cnf(linux)配置文件中的[mysqld]节点下操作,各项参数都是小写字母。

  • (必须)主机设置服务器的唯一id:server-id=1
  • (必须)启用二进制日志(启用binaryLog日志):log-bin=xxx/mysqlbin(建议不要放在和mysql同一个位置下。这个路径的最后一项是文件名,为不是文件夹名)
  • (可选)启用错误日志:log-err=D:\mysql8\data\mysqlerr
  • (可选)根目录:basedir=D:\mysql8
  • (可选)临时目录:tmpdir=D:\mysql8
  • (可选)数据目录:datadir=自己本地路径\Data\
  • read-only=0:主机读写都可以
  • (可选)binlog-ignore-db=mysql:设置不要复制的数据库
    binlog-do-db=需要复制的数据库的名字(这里写上要复制的数据库的名字,不要建立数据库,因为在从机向主机拉取数据,主从搭建之前建立数据库的话,从机会报数据库已经存在的错误)
  • 10.binlog_format=STATEMENT(默认)

额外补充的知识:三种格式:

  • STATEMENT,如update xxx set xx time = now(),因为使用了时间函数会导致主机与从机的时间不一致
  • ROW,如123 ——> 456。它记录了行数据的变化。但是弊端在于效率低下
  • MIXED:有函数就使用ROW,否则使用STATEMENT。但弊端在于SQL中有系统变量就会存在主从不一致
Example:
主机(Linux)
  1. 事先创建文件夹:/opt/mysql8/data/,用来存放mysql的二进制操作文件。然后再为mysql8文件夹改变用户组:
[root@iZ2zea3c7u9cgqfjibsmdzZ opt] mkdir -p mysql8/data/
[root@iZ2zea3c7u9cgqfjibsmdzZ opt] chown mysql:mysql -R mysql8
  1. 编辑/etc/my.cnf文件:
[mysqld]
# set basedir to your installation path
server-id=1
log-bin=/opt/mysql8/data/mysqlbin
#log-err=D:\mysql8\data\mysqlerr
port=3306
basedir=/opt/mysql8
tmpdir=/opt/mysql8
# set datadir to the location of your data directory
datadir=/opt/mysql8/mydata/data
default-time-zone='+8:00'
binlog-ignore-db=mysql
binlog-do-db=mydb
从机(Linux)
  1. 从机修改my.cnf
[mysqld]
server-id=2
relay-log=mysql-relay
#skip-grant-tables
bind_address=0.0.0.0
#port=3306
default-time-zone='+8:00'
skip-name-resolve=ON
#log-bin=mysql-bin


  1. 主机与从机都重启(必要时把两者的防火墙都关掉)
systemctl restart mysqld
  1. 主机创建一个可以远程登录的用户,使得从机登录此用户来更新主机的数据。
mysql> CREATE USER slave01 @"%" IDENTIFIED BY 'slave01';
mysql> GRANT REPLICATION SLAVE ON *.* TO "slave01"@"%";
mysql> FLUSH PRIVILEGES;
  1. 开始主从复制

(1) 主机:主机创建一个库。CREATE TABLE...

主机 mysql> SHOW MASTER STATUS;

在这里插入图片描述

参数解释:

  • File:主机的bin文件名
  • Position:主机的bin文件的Position
  • Binlog_Do_DB:需要主从复制的数据库
  • Binlog_ingore_DB:不需要主从复制的数据库

(2)从机:

从机:mysql> CHANGE MASTER TO MASTER_HOST = '主机ip',
		MASTER_USER = '主机用户A',
		MASTER_PASSWORD = '主机用户A的密码',
		MASTER_LOG_FILE = '主机的bin文件名',
		MASTER_LOG_POS = 主机的bin文件的Position;

(2)启动从机的复制功能

mysql> start slave

查看

mysql> show slave status\G
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.129.244
                  Master_User: slave01
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysqlbin.000004
          Read_Master_Log_Pos: 156
               Relay_Log_File: mysql-relay.000002
                Relay_Log_Pos: 323
        Relay_Master_Log_File: mysqlbin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 

注意:Slave_IO_Running与 Slave_SQL_Running都为YES代表主从复制建立成功

四、排错

(1)The replication receiver thread cannot start because the master has GTID_MODE = OFF and this server has GTID_MODE = ON.

通过MHA从库查看show slave status \G;会提示如下报错!
Last_IO_Error: The replication receiver thread cannot start because the master has GTID_MODE = ON and this server has GTID_MODE = OFF.
 mysql> set global gtid_mode=on;
ERROR 1788 (HY000): The value of @@GLOBAL.GTID_MODE can only be changed one step at a time: OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON. Also note that this value must be stepped up or down simultaneously on all servers. See the Manual for instructions.

mysql> set global gtid_mode=OFF_PERMISSIVE;
Query OK, 0 rows affected (0.00 sec)

mysql> set global gtid_mode=ON_PERMISSIVE;
Query OK, 0 rows affected (0.02 sec)

mysql> set global gtid_mode=ON; 开启gtid之前 ,必须设置enforce_gtid_consistency=on
ERROR 3111 (HY000): SET @@GLOBAL.GTID_MODE = ON is not allowed because ENFORCE_GTID_CONSISTENCY is not ON.

mysql> set global enforce_gtid_consistency=on;
Query OK, 0 rows affected (0.00 sec)

mysql> set global gtid_mode=ON;
Query OK, 0 rows affected (0.01 sec)
再次输入start slave开启MHA的主从数据同步

(2)MySQL 出现 Could not initialize master info structure
修复:reset slave

(3)navicat连接异常 authentication plugin ‘caching_sha2_password’
问题解决

ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;

(4)安装mysql后在/var/log/mysqld.log 中找不到临时密码

rm -rf /var/lib/mysql
systemctl restart mysqld
grep 'temporary password' /var/log/mysqld.log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值