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

 

数据库主从复制

主从机制实现原理

mysql 数据字典 sql mysql 数据字典查询权限命令_mysql 数据字典 sql

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

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