MySQL常用命令及权限命令,主从数据
mysql常用命令
desc 查看表结构
create database 数据库名
create table 表名
show create database 库名 查看如何创建db的
show create table 表名; 查看如何创建table结构的
#修改mysql的密码
set password = PASSWORD('redhat');
#创建mysql的普通用户,默认权限非常低
create user 用户名@'%' identified by '用户密码'; %代表该用户从任何主机地址都可以访问
#查询mysql数据库中的用户信息
use mysql;
select host,user,password from user;
给用户添加权限命令
grant all privileges on *.* to 账户@主机名 对所有库和所有表授权所有权限
grant all privileges on *.* to eric@'%'; 给eric用户从任意主机地址登录授予所有权限
flush privileges; 刷新授权表
授予远程登录的权限命令 (root默认是不能远程登录的)
grant all privileges on *.* to eric@'%'; 给eric用户授予所有权限
grant all privileges on *.* to root@'%' identified by '111111'; #给与root权限授予远程登录的命令
此时可以在windows登录linux的数据库
mysql -ueric -p -h 服务器的地址 连接服务器的mysql
学习mysql的数据备份与恢复
1.mysqldump -u root -p --all-databases > /data/AllMysql.dump 导出当前数据库的所有db,到一个文件中
2.登录mysql 导入数据
mysql -u root -p
source /data/AllMysql.dump
3.Linux下通过命令也导入数据
mysql -uroot -p < /data/AllMysql.dump #在登录时候,导入数据文件,一样可以写入数据
配置文件的格式
*.conf
*.cnf
*.ini
*.yml
中文编码设置
中文编码设置,编辑mysql配置文件/etc/my.cnf,下入以下内容
[mysqld] character - set - server = utf8 collation - server = utf8_general_ci log - error = / var / log / mysqld.log [client] default - character - set = utf8 [mysql] default - character - set = utf8 |
数据库主从复制
主从机制实现原理
master主库配置
#查看数据库状态 systemctl status mariadb #停mariadb systemctl stop mariadb #修改配置文件 vim / etc / my.cnf #修改内容 #解释:server-id服务的唯一标识(主从之间都必须不同);log-bin启动二进制日志名称为mysql-bin [mysqld] server - id = 1 # 标注主库的身份id log - bin = mysql - bin # binlog的文件名 #重启mariadb systemctl start mariadb #查看日志文件名字及数据起始点 登录mysql show master status; |
master主库添加从库账号
1. 新建用于主从同步的用户admin,允许登录的从库是 '192.168.178.130' create user 'eric' @ '192.168.178.130' identified by '111111' ; 2. #题外话:如果提示密码太简单不复合策略加在前面加这句 mysql> set global validate_password_policy = 0 ; 3. 给从库账号授权,说明给eric从库复制的权限,在 192.168 . 178.130 机器上复制 grant replication slave on * . * to 'eric' @ '192.168.178.130' ;
#检查主库创建的复制账号 select user,host from mysql.user; #检查授权账号的权限 show grants for eric@ '192.168.178.130' ; 实现对主数据库锁表只读,防止数据写入,数据复制失败 flush table with read lock; 4. 检查主库的状态 MariaDB [(none)]> show master status - > ; + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - + - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - + - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + | mysql - bin . 000001 | 575 | | | + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - + - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + 1 row in set ( 0.00 sec) File 是二进制日志文件名,Position 是日志开始的位置。后面从库会用到 后面从库会用到 后面从库会用到!!!!!! 5. 锁表后,一定要单独再打开一个SSH窗口,导出数据库的所有数据,(初始数据转移时先锁表保证没有人进行修改再操作数据导出) [root@localhost ~ 19 : 32 : 45 ] #mysqldump -uroot -p --all-databases > /data/all.sql 6. 确保数据导出后,没有数据插入,完毕再查看主库状态 show master status; 7. 导出数据完毕后,解锁主库,恢复可写; unlock tables; 8. 将备份导出的数据scp至Slave数据库 scp / data / all .sql root@ 192.168 . 178.130 : / data / |
slave从库配置
1. 设置server - id 值并关闭binlog功能参数 数据库的server - id 在主从复制体系内是唯一的,Slave的server - id 要与主库和其他从库不同,并且注释掉Slave的binlog参数。 2. 因此修改Slave的 / etc / my.cnf,写入 [mysqld] server - id = 3 3. 重启数据库 systemctl restart mariadb 4. 检查Slava从数据库的各项参数 show variables like 'log_bin' ; show variables like 'server_id' ; 5. 恢复主库Master的数据导入到Slave库 导入数据(注意sql文件的路径) mysql>source / data / all .sql; 方法二: #mysql -uroot -p < abc.sql 6. 配置复制的参数,Slave从库连接Master主库的配置 mysql > change master to master_host = '192.168.178.129' , master_user = 'eric' , master_password = '111111' , master_log_file = 'mysql-bin.000001' , master_log_pos = 575 ; 7. 启动从库的同步开关,测试主从复制的情况 start slave; 8. 查看复制状态 show slave status\G; |
成功标志:两个yes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | MariaDB [(none)]> show slave status\G * * * * * * * * * * * * * * * * * * * * * * * * * * * 1. row * * * * * * * * * * * * * * * * * * * * * * * * * * * Slave_IO_State: Waiting for master to send event Master_Host: 192.168 . 119.10 Master_User: chaoge Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql - bin . 000001 Read_Master_Log_Pos: 1039 Relay_Log_File: slave - relay - bin . 000002 Relay_Log_Pos: 537 Relay_Master_Log_File: mysql - bin . 000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes |
如果没有实现两个yes,可检查防火墙是否拦截了,另外要注意position位置是否正确,以及对应的master_log_file名称是否是最新的,因为每次设置master都会有最新的
注意此处还未配置从库的只读模式,只需在slave服务器上配置/etc/my.cnf,加上以下配置,并且在slave上创建普通用户,使用普通用户主从同步即可达到只读的效果
如果用root用户,无法达到readonly,这是一个坑
[mysqld] character - set - server = utf8 collation - server = utf8_general_ci log - error = / var / log / mysqld.log server - id = 3 read - only = true [client] default - character - set = utf8 [mysql] default - character - set = utf8 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了