linux向mysql写数据_Linux之数据库操作

本文详细介绍了在Linux环境下如何操作MySQL数据库,包括连接、权限管理、数据备份与恢复,以及MariaDB主从复制的配置步骤。内容涵盖创建用户、权限分配、数据库备份与导入,以及Redis的发布订阅和持久化机制,最后讲解了Redis的主从同步和哨兵系统的应用。
摘要由CSDN通过智能技术生成

一、mysql基本操作

1,连接数据库

mysql-u root -p -h 127.0.0.1mysql-u root -p -h 192.168.12.56

2,授予远程连接的权限

grant all privileges on*.* to root@"%" identified by "nihao123"

3,修改root用户的密码

先进入mysql的交互式模式set password = PASSWORD('redhat123');4,创建mysql用户

create user zijin@"%" identified by "zijin"

5,给予zijin用户查询所有库和所有表的权限

grantselect on *.* to zijin@"%" identified by "zijin"

6,查询mysql库中的用户信息

use mysql;select host,user,password fromuser;7,给予zijin用户创建所有库和表的权限,再给修改权限,再给删除权限

grant create on*.* to zijin@"%" identified by "zijin"grant update on*.* to zijin@"%" identified by "zijin"grant delete on*.* to zijin@"%" identified by "zijin"

8,授予mysql权限的语法

mysql使用grant命令对账户进行授权,grant命令常见格式如下

grant 权限 on 数据库.表名 to 账户@主机名 对特定数据库中的特定表授权

grant 权限 on 数据库.*to 账户@主机名   对特定数据库中的所有表给与授权

grant 权限1,权限2,权限3 on*.*to 账户@主机名    对所有库中的所有表给与多个授权

grant all privileges on*.*to 账户@主机名    对所有库和所有表授权所有权限9,移出zijin的创建权限

revoke create on*.* from zijin@"%" identified by 'zijin';

revoke delete on*.* from zijin@"%" identified by 'zijin;

10,数据库备份与恢复

mysqldump-u root -p --all-databases > /tmp/db.sql #这不是在数据库环境下

可以备份单个数据库

mysqldump-u root -p luffycity > /tmp/luffycity.sql11,导入数据

第一种:

进入mysql交互模式

source/tmp/luffycity.sql;

第二种:

mysql-u root -p < /tmp/luffycity.sql

第三种:

navicat

二,mariadb主从复制部署

1, 准备两台机器

192.168.12.56#主服务器master(可读可写)

mariadb数据库用户名:root

密码:root1192.168.12.81#从服务器slave(可读)

mariadb数据库用户名:root

密码:root2

2, 配置主数据库

2.1 修改主数据库配置文件

1,进入配置文件

vim/etc/my.cnf2,添加配置信息

[mysqld] # 如果配置文件里面有这一行,就只需要加以下两行配置就可以了

server-id=1log-bin=qishi2-logbin

2.2 进入数据库

systemctl start mariadb

2.3 创建主从复制用户

1,进入数据库

mysql -uroot -p

2,创建用户

create user zijin@'%' identified by 'zijin';

2.4 给从库账号授权

grant replication slave on *.* to 'zijin'@'%';

2.5 把主库数据导入从库

1,实现对主数据库锁表只读,防止数据写入,数据复制失败

flush table with readlock;2,查看并记录主数据库的状态

show master status;3,导出主数据库的数据为alldb.sql

mysqldump-u root -p --all-databases > /opt/alldb.sql #这个是在数据库环境外4,scp /opt/alldb.sql 192.168.12.81:/opt/

58cd82d3607a7663a60fcdffd5b8433b.png

3,配置从数据库

3.1 修改从数据库的配置文件

1,进入配置文件

vim/etc/my.cnf2,添加信息

[mysqld]

server-id=5read-only=true

3.2 启动数据库

systemctl start mariadb

3.3 导入主库的数据

1,连接数据库

mysql-u root -p2,导入数据

source/opt/alldb.sql

3.4 配置复制的参数,slave从库连接master主库的配置(最重要的)

在数据库的环境下输入:

change master to master_host='192.168.12.64',

master_user='zijin',

master_password='zijin',

master_log_file='qishi2-logbin.000004',

master_log_pos=467;

3.5 启动从库的同步开关

start slave #开启

stop slave #停止

3.6 查看从库的状态

show slave status;

还可以输show slave status /G;

9b00e429a31cb3e0e99c2ec03491ed4e.png

3,主库再设置

3.1 从库数据导入完毕和开启主从同步后,解锁主库

unlock tables; #在主库下

3.2验证主从复制情况

在主库上创建数据,查看从库数据同步状态

3.3 在主库上给zijin用户select权限,并刷新权限表

grant select on *.* to zijin@"%" identified by "zijin";

flush privileges;

3.4 在从库上登录zijin用户,并试图创建一个库

create database aaaa;

ERROR1290 (HY000): The MariaDB server is running with the --read-only option so

it cannot execute this statement #说明从库没有新建的权限

三、redis发布订阅和持久化

1,redis发布订阅

1.1基本命令

PUBLISH channel msg

将信息 message 发送到指定的频道 channel

SUBSCRIBE channel [channel ...]

订阅频道,可以同时订阅多个频道

UNSUBSCRIBE [channel ...]

取消订阅指定的频道, 如果不指定频道,则会取消订阅所有频道

PSUBSCRIBE pattern [pattern ...]

订阅一个或多个符合给定模式的频道,每个模式以* 作为匹配符,比如 it* 匹配所 有以 it 开头的频道

( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有 以 news. 开头的频道

( news.it 、 news.global.today 等等),诸如此类

PUNSUBSCRIBE [pattern [pattern ...]]

退订指定的规则, 如果没有参数则会退订所有规则

PUBSUB subcommand [argument [argument ...]]

查看订阅与发布系统状态

注意:使用发布订阅模式实现的消息队列,当有客户端订阅channel后只能收到后续发布到该频道的消息,之前发送的不会缓存,

必须Provider和Consumer同时在线。

1.2发布订阅案例

发布者

[root@web02~]# redis-cli127.0.0.1:6379> PUBLISH diantai 'jinyewugenglaiwojia'(integer)2订阅者1

[root@web02~]# redis-cli127.0.0.1:6380>SUBSCRIBE diantai

Reading messages... (press Ctrl-C to quit)1) 'jinyewugenglaiwojia'

2) (integer) 1订阅者2

[root@web02~]# redis-cli127.0.0.1:6381>SUBSCRIBE diantai

Reading messages... (press Ctrl-C to quit)1) 'jinyewugenglaiwojia'

2) (integer) 1

1.3 订阅模糊匹配的频道案例

发布者

[root@web02~]# redis-cli127.0.0.1:6379> PUBLISH wangbaoqiang "jintian zhennanshou"(integer)2订阅者1127.0.0.1:6380> PSUBSCRIBE wang*Reading messages... (press Ctrl-C to quit)1) "jintian zhennanshou"

2) (integer) 1订阅者2127.0.0.1:6381> PSUBSCRIBE wa*Reading messages... (press Ctrl-C to quit)1) "jintian zhennanshou"

2) (integer) 1

2,redis持久化之RDB

2.1 创建redis配置文件

vim /opt/redis_conf/reids-6379.conf

2.2 写入信息

port 6379daemonize yes

dir/data/6379pidfile/data/6379/redis.pid

loglevel notice

logfile"/data/6379/redis.log"

protected-mode yes

dbfilename dbmp.rdb

save900 1save300 10save60 10000

2.3 进入redis数据库,写入数据,并使用save命令开启rdb持久化

redis-clisetname liujieset age 18

setsex nam

save # 开启rdb持久化, 也可以不用

3,redis之AOF持久化

3.1 修改redis配置文件

1,进入配置文件

vim/opt/redis_conf/redis-6379.con2,写入配置信息

appendonly yes

appendfsync everysec

3.2 重启redis服务

pkill reids

redis-server /opt/redis_conf/redis-6379.conf

3.3 不用重启redis,直接从RDB切换到AOF(因为生产环境中是不允许停止redis)

1,修改redis配置文件

daemonize yes

port6379logfile/data/6379/redis.log

dir/data/6379dbfilename dbmp.rdb

save900 1#rdb机制 每900秒 有1个修改记录

save300 10#每300秒 10个修改记录

save60 10000#每60秒内 10000修改记录2,启动redis服务端

redis-server redis.conf3,写入数据127.0.0.1:6379> setname tiger

OK127.0.0.1:6379> set age 18OK127.0.0.1:6379> setaddr daxuecheng

OK127.0.0.1:6379>save

OK4,检查rdb文件是否存在,然后备份rdb文件(这是生成环境中需要做的,以免切换不成功导致数据丢失)5,开启AOF持久化

CONFIGsetappendonly yes # 开启AOF功能

CONFIG SET save"" # 关闭RDB功能

四、redis主从同步

1,准备三个redis配置文件

cd /opt/redis_conf

redis-6380.conf # 主数据库master

redis-6381.conf # 从库slave

redis-6382.conf # 从库slave

2,在配置文件写入配置信息,是哪个内容一样,只是端口不一样而已

port 6380daemonize yes

pidfile/data/6380/redis.pid

loglevel notice

logfile"/data/6380/redis.log"dbfilename dump.rdb

dir/data/6380

protected-mode no

可以使用这一条命令通过redis-6380.conf生成6381和6382的配置文件

sed"s/6380/6381/g" redis-6380.conf > redis-6381.conf

sed"s/6380/6382/g" redis-6380.conf > redis-6382.conf

3,在6381和6382文件中加入以下配置,使其成为从数据库

slaveof 127.0.0.1 6380

4,开启这三个redis服务,确保启动正常,并查看状态

1,首先开启是三个redis服务

redis-server /opt/redis_conf/redis-6380.conf

redis-server /opt/redis_conf/redis-6381.conf

redis-server /opt/redis_conf/redis-6382.conf

2,用三个客户端连接

redis-cli -p 6380info replication

redis-cli -p 6381info replication

redis-cli -p 6382 info replication

5,验证redis主从复制功能

1,6380写入数据,在6381和6382中查看数据是否同步2,看是否能在6381和6382中写入数据(正常情况下是不能的)

6,手动切换主从复制

也就是当6380进程死掉后,相当于主库没了,此时就需要从6381和6382中选择一个作为主库,完成主从复制切换

6.1 把最开始的主库6380进程给杀死

kill -9 进程id

6.2 在6382的redis下执行这条命令(此时我们选择6382为主库)

slaveof no one

6.2 此时6381为从库,把原来的主库指向改为6382

slaveof no one

slaveof127.0.0.1 6382

6.3 可以验证此时的主从复制功能

1,在6382上写入数据,在6381上查看数据(正常情况下是数据同步的)2,在6381上写数据(正常情况下为报错)

7,哨兵sentinel

对于第6步来说,必须要我们手动切换主从配置,其实是不科学的,所以,大佬开发了哨兵sentinel,用哨兵去监控主库,当主库挂掉的时候,哨兵从从库中决策出一个新的主库,剩余的从库就作为新的主库的从库。

7.1准备三个哨兵配置文件

touch /opt/redis_conf/redis-26380.conf

touch/opt/redis_conf/redis-26381.conf

touch/opt/redis_conf/redis-26382.conf

7.2修改redis-26380.conf配置文件

port 26380dir/var/redis/data/logfile"26380.log"sentinel monitor qishi2master127.0.0.1 6380 2sentinel down-after-milliseconds qishi2master 30000sentinel parallel-syncs qishi2master 1sentinel failover-timeout qishi2master 180000daemonize yes

7.3再配置另外两个哨兵

sed "s/26380/26381/g" redis-26380.conf > redis-26381.conf

sed"s/26380/26382/g" redis-26380.conf > redis-26382.conf

7.4启动是三个哨兵

redis-sentinel /opt/redis_conf/redis-26380.conf

redis-sentinel /opt/redis_conf/redis-26381.conf

redis-sentinel /opt/redis_conf/redis-26382.conf

7.5查看进程

ps -ef | grep redis-sentinel

7.6可以查看三个哨兵的状态

redis-cli -p 26380info sentinel

redis-cli -p 26381info sentinel

redis-cli -p 26382 info sentinel

7.7测试,把主库干掉

1,查看主库进程id

ps-ef |grep redis2,杀死主库进程

kill-9主库进程ID3,查看6381和6382的状态

redis-cli -p 6381info replication

redis-cli -p 6381 info replication

五、redis集群

1,准备6个配置文件

1,我们把集群的配置文件放在/opt/redis_conf/redis_cluster目录

mkdir/opt/redis_conf/redis_cluster2,创建配置文件

cd redis_cluster

touch redis-6000.conf redis-6001.conf redis-6002.conf redis-6003.conf redis-6004.conf redis-6005.conf

2,往配置文件中添加配置信息

1,进入redis-6000.conf

vim redis-6000.conf2,写入如下配置信息

port6000daemonize yes

dir"/opt/redis/data"logfile"/opt/redis/logs/6000.log"dbfilename"dump-6000.rdb"cluster-enabled yes # 开启集群模式

cluster-config-file nodes-6000.conf  # 集群内部的配置文件

cluster-require-full-coverage no  # redis cluster需要16384个slot都正常的时候才能对外提供服务,

换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 因此生产环境一般为no3,配置其他5个配置文件

sed"s/6000/6001/g" redis-6000.conf > redis-6001.conf

sed"s/6000/6002/g" redis-6000.conf > redis-6002.conf

sed"s/6000/6003/g" redis-6000.conf > redis-6003.conf

sed"s/6000/6004/g" redis-6000.conf > redis-6004.conf

sed"s/6000/6005/g" redis-6000.conf > redis-6005.conf

3,启动这6个redis集群节点

redis-server redis-6000.conf

redis-server redis-6001.conf

redis-server redis-6002.conf

redis-server redis-6003.conf

redis-server redis-6004.conf

redis-server redis-6005.conf

2,查看进程

ps -ef | grep redis

现在是无法往节点上添加数据的,因为哈希槽还没分配

我们需要使用redis-trib.rb去分配集群的哈希槽,但这个脚本需要使用ruby环境去执行,所以我们需要安装ruby解释器

4,安装ruby解释器

1下载ruby

wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz

2安装ruby

tar-xvf ruby-2.3.1.tar.gz

cd ruby-2.3.1/./configure --prefix=/opt/ruby/make&&make install3配置ruby的环境变量

vim/etc/profile

写入如下配置

PATH=$PATH:/opt/ruby/bin4,读取

source/etc/profile

5,安装ruby gem包管理工具

1下载gem包管理工具

wget http://rubygems.org/downloads/redis-3.3.0.gem

2安装

gem install-l redis-3.3.0.gem

6,开启集群

/opt/redis-4.0.10/src/redis-trib.rb create --replicas 1 127.0.0.1:6000 127.0.0.1:6001 127.0.0.1:6002

127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005命令说明:--replicas # 表示进行身份授权1# 表示每个主节点,只有一个从节点

# 集群会自动分配主从关系6000、6001、6002为主服务器master 6003、6004、6005为从服务器slave

7,可以查看集群状态与槽位

redis-cli -p 6000cluster info

redis-cli -p 6001cluster info

redis-cli -p 6002cluster info

redis-cli -p 6003cluster info

redis-cli -p 6004cluster info

redis-cli -p 6005 cluster info

8,使用命令连接redis集群

redis-cli -p 6000 -c-c 参数表示连接集群

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值