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;
#记录下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;
两者 都为yes表示搭建成功
- 运行几个SQL语句测试一下
update user set name='123456' where id=1;
双主双从
再次搭建两个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,防止主服务器状态值变化
- 从机复制主机(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;
均为yes表示开启成功
- 测试一下
#master1 更新
update user set name='789456' where id=1;
- 完成
一主多从
配置不用进行修改,只需要在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更新
MySQL 5.7之前只能实现一主一从、一主多从或者多主多从的复制