Mysql环境搭建


typora-root-url: C:\


Apt安装

Ubuntu

18.04版本

安装
  • 更新数据源:apt-get update
  • 安装数据库:apt-get install mysql-server
  • 默认安装 5.7.32版本

注意: 系统将提示您在安装过程中创建 root 密码。选择一个安全的密码,并确保你记住它,因为你以后需要它。接下来,我们将完成 MySQL 的配置。

配置

注意: 因为是全新安装,您需要运行附带的安全脚本。这会更改一些不太安全的默认选项,例如远程 root 登录和示例用户。在旧版本的 MySQL 上,您需要手动初始化数据目录,但最新的 MySQL 已经自动完成了。

mysql_secure_installation

这将提示您输入您在之前步骤中创建的 root 密码。您可以按 Y,然后 ENTER 接受所有后续问题的默认值,但是要询问您是否要更改 root 密码。您只需在之前步骤中进行设置即可,因此无需现在更改。

验证安装是否成功

按上边方式安装完成后,MySQL 应该已经开始自动运行了。要测试它,请检查其状态。

systemctl status mysql
# 输出如下
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-11-21 13:04:34 CST; 3min 24s ago
 Main PID: 2169 (mysqld)
   CGroup: /system.slice/mysql.service
           └─2169 /usr/sbin/mysqld
Nov 21 13:04:33 ubuntu systemd[1]: Starting MySQL Community Server...
Nov 21 13:04:34 ubuntu systemd[1]: Started MySQL Community Server.
常用命令
  • 查看版本:mysqladmin -p -u root version
  • 启动:service mysql start
  • 停止:service mysql stop
  • 重启:service mysql restart
  • 登录:mysql -u root -p
  • 授权:grant all privileges on . to ‘root’@’%’ identified by ‘123456’;
扩展阅读
配置使用密码方式登录

在安装过程中可能没有提示密码设置的环节此时默认使用的是 auth_socket 方式登录,我们需要修改为 mysql_native_password 方式,操作步骤如下

  • 本地登录 MySQL,此时无需输入密码
mysql -u root -p
  • 切换数据库到 mysql
use mysql;
  • 修改 root 账号密码
update user set authentication_string=password('123456'),Host="%" where user='root';
  • 设置登录模式
update user set plugin="mysql_native_password";
  • 刷新配置
flush privileges;
  • 退出 MySQL
exit;
  • 重新启动 MySQL
systemctl restart mysql
配置远程访问
  • 修改配置文件
vi /etc/mysql/mysql.conf.d/mysqld.cnf
  • 注释掉(语句前面加上 # 即可):
# bind-address = 127.0.0.1
  • 重启 MySQL
service mysql restart
  • 登录 MySQL
mysql -u root -p
  • 授权 root 用户允许所有人连接
#grant all privileges on *.* to 'root'@'%' identified by '123456';
因弱口令无法成功授权解决步骤
  • 查看和设置密码安全级别
select @@validate_password_policy;
set global validate_password_policy=0;
  • 查看和设置密码长度限制
select @@validate_password_length;
set global validate_password_length=1;
其它配置

修改配置文件:vi /etc/mysql/mysql.conf.d/mysqld.cnf

[client]
default-character-set=utf8
[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
lower-case-table-names=1

注意: 配置内容追加到对应节点的底部即可

主从配置

Ubuntu

18.04版本

Mysql版本: 5.7.32版本

一主一从
  • 主机配置
#修改配置文件:
#配置文件位置和名称会因为linux系统不同或者安装版本不同有所变化
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
binlog-do-db=testdb
#设置logbin格式
binlog_format=STATEMENT

binlog_format可以设置为三种格式:

  • STATEMENT:把所有的数据都写入日志,由于time=now(),容易造成主从不一致

  • ROW:只记录哪一行改变,全表刷新时,需要全部修改

  • MIXED:STATEMENT与ROW混合,有行号就用ROW,没有就STATEMENT,解决了一部分数据不一致的问题,但无法识别@@hostname获取当前主机名称

  • 从机配置
#修改配置文件:
#配置文件位置和名称会因为linux系统不同或者安装版本不同有所变化
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
  • 重启mysql服务service mysql restart
  • 主机上设置并授权从机账户
-- 创建并授权账户
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
-- 查询master状态
show master status;

image-20201113174754898

#记录下File和Position的值

#执行完此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化

  • 在从机上配置需要复制的主机
--复制主机的命令
CHANGE MASTER TO MASTER_HOST='192.168.40.200',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=430;
#启动从服务器复制功能
start slave;
# 停止
stop slave;
# 重置
reset slave;
#查看从服务器状态
show slave status\G;

image-20201113180321809

两者 都为yes表示搭建成功

  • 运行几个SQL语句测试一下
update user set name='123456' where id=1;

image-20201113180646082

双主双从

再次搭建两个SQL服务器

  • 首先,停止之前slave-1与master-1的连接
# 停止
stop slave;
# 重置
reset master;
  • master-1配置
#修改配置文件:
#配置文件位置和名称会因为linux系统不同或者安装版本不同有所变化
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
#binlog-do-db=需要复制的主数据库名字
binlog-do-db=testdb
#设置logbin格式
binlog_format=STATEMENT
# 新增配置
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1 
  • master-2配置:
#修改配置文件:
#配置文件位置和名称会因为linux系统不同或者安装版本不同有所变化
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#主服务器唯一ID
server-id=3
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
#binlog-do-db=需要复制的主数据库名字
binlog-do-db=testdb
#设置logbin格式
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=2
  • slave-1配置
#修改配置文件:
#配置文件位置和名称会因为linux系统不同或者安装版本不同有所变化
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
  • slave-2配置
#修改配置文件:
#配置文件位置和名称会因为linux系统不同或者安装版本不同有所变化
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#从服务器唯一ID
server-id=4
#启用中继日志
relay-log=mysql-relay
  • 重启mysql服务service mysql restart
  • master节点创建slave账户并授权
#在主机MySQL里执行授权命令
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
#查询Master1的状态
show master status;
#分别记录下File和Position的值
#执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

image-20201116124929362

image-20201116124940879

  • 从机复制主机(slave-1复制 master-1,slave-2 复制 master-2)
#复制主机的命令
#slave1
CHANGE MASTER TO MASTER_HOST='192.168.40.200',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=154;
#slave2
CHANGE MASTER TO MASTER_HOST='192.168.40.202',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=435;
# 开启复制
start slave;
#查看从服务器状态
show slave status\G;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RfDNBabB-1605507797734)(https://gitee.com/tygiteeone/figure-bed/raw/master/20201116125318.png)]

Slave_IO_Running与Slave_SQL_Running均为YES即可

  • 主机间相互复制:
#复制主机的命令
#master1
CHANGE MASTER TO MASTER_HOST='192.168.40.200',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=154;
#master2
CHANGE MASTER TO MASTER_HOST='192.168.40.202',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=435;
# 开启复制
start slave;
#查看从服务器状态
show slave status\G;

image-20201116125614779

均为yes表示开启成功

  • 测试一下
#master1 更新
update user set name='789456' where id=1;

image-20201116125849842

  • 完成
一主多从

一主多从参考

配置不用进行修改,只需要在slave原本基础上进行配置

# 停止
stop slave;
# 重置
reset master;

#将slave的存储方式由文件存储改为表存储
SET GLOBAL master_info_repository = 'TABLE';
SET GLOBAL relay_log_info_repository = 'TABLE';
#也可以直接修改
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#添加
master_info_repository=TABLE
relay_log_info_repository=TABLE
#复制主机的命令
CHANGE MASTER TO MASTER_HOST='192.168.40.200',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=2019 FOR CHANNEL 'Master_1';
CHANGE MASTER TO MASTER_HOST='192.168.40.202',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=470 FOR CHANNEL 'Master_2';
# 开启复制
start slave for CHANNEL  'Master_1';
start slave for CHANNEL  'Master_2';
# 查看状态
SHOW SLAVE STATUS FOR CHANNEL 'Master_1'\G
SHOW SLAVE STATUS FOR CHANNEL 'Master_2'\G
#也可以监控复制状态。
SELECT * FROM performance_schema.replication_connection_status; 
  • 测试一下
update user set name='test' where id=1;#从master更新

image-20201116141943855

MySQL 5.7之前只能实现一主一从、一主多从或者多主多从的复制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值