一、Mysql基本命令
1、基础常用命令
本地登陆:mysql -u root -p 密码
远程登陆:mysql -h 登陆ip 端口(通常3306) -u root -p 密码
2、创建命令
创建数据库:create database 数据库名 (default charset utc8)
创建数据表:create table 表名(列名 数据库类型 约束,…) (engine=innodb default charset=utf8)
3、查表命令
(1)查看数据库:show databases;
(2)进入数据库:use databases(数据库名)
(3)条件查找:select *from 表名;
Select *from 表名 where 条件1 and 条件2;
从大到小排序:select *from 表名 order by 列名 desc;
从小到大排序:select *from 表名 order by 列名 asc;
列1从大到小排序,列2从小到大排序:select *from 表名 order by 列名1 desc 列名2 asc;
(4) 连表操作
左连接:select *form 表1 left join 表2 on 表1.列名=表2.列名;
右连接:select *from 表1 right join 表2 on 表1.列名=表2.列名;
内连接:select *from 表1 inner join 表2 on 表1.列名=表2.列名
临时表:(select *from 表名)as e
4、删除,修改,插入命令
(1)插入
插入值:insert into 表名(列名1,列名2…)values(值1,值2)
在表1中插入表2中的数据:Insert into 表名1(列名) select 列名 from 表2
(2)修改
Update 表名 set 列名1=value1,列名2=value2 where 条件1 and/or 条件2;
(3)删除
清除表:delete from 表名(如果有自增id,id不会重新开始)
清除特定数据:delete from 表名 where 条件
清除表:truncate table 表名(如果有自增id,id会重新开始)
二、Mysql数据同步,集群
1、Mysql数据同步
① 设置数据库为只读状态,防止新的数据写入。
主库 set global read_only=1;
② 导出主库的所有数据。
在主库的linux上执行:
mysqldump -u root -p --all-databases > /usr/local/src/test1.sql --set-gtid-purged=OFF
③从库执行:
drop database “表名”; ===从库删除所有除系统的数据表;
查看数据库: show databases;删除数据库:drop database 数据库1;drop database 数据库2; mysql -u 用户名 -p -e "DROP DATABASE 数据库1; DROP DATABASE 数据库2; DROP DATABASE 数据库3;"
从库删掉除了MySQL、information_schema、mysql_innodb_cluster_metadata、performance_schema、sys以外的其它数据库
④ 从库登录root 执行
Stop group_replication; Set global read_only=0;===停止同步数据库机制,并将从库数据库设置为可写操作;
⑤ 从库Linux执行
scp -r root@主库ip:/usr/local/src/test1.sql /usr/local/src/test1.sql从库root账号登录MySQL,执行 source /usr/local/src/test1.sql ======从库从主库拷贝数据;
⑥从库执行完毕后,主库#启动引导项
SET GLOBAL group_replication_bootstrap_group=ON;
#开启组复制
START GROUP_REPLICATION;
#关闭引导项,防止服务重启时引起新的引导导致脑裂
SET GLOBAL group_replication_bootstrap_group=OFF;
rest master; reset slave; start group_replication;
⑦ 从库恢复后,主库操作
set global read_only=0; ===已成功同步主库的数据到从库,设置主库为可读
2、数据未同步成功,重新操作(同步成功忽略)
mysqlsh --mysqlx -u root -h localhost 进入mysqlshell
var cluster=dba.getCluster('prodCluster')
cluster.status() \q退出来
SET GLOBAL read_only = 1 #设置数据库为只读状态,防止新的数据写入
reset master #清空binlog
#导出指定数据库数据,此处导出生产数据即可,mysql自带的数据库忽略
mysqldump -uroot -proot --databases db1 db2 >/opt/product_data.sql
1、导出
mysqldump -u root -p --databases data_analyze rdtest rdtest_approve_service rdtest_lab_agent_manager rdtest_message_center rdtest_service_proxcy rdtestreservation rdtesttaskmanage rdtestworkflow role_management > /usr/local/src/test1.sql --set-gtid-purged=OFF
2、导入
清空从数据库数据(使用drop database db1逐个数据库清理),导入由主库导出的product_data.sql,保证主从数据一致性。
Source /opt/product_data.sql
#启动引导项
SET GLOBAL group_replication_bootstrap_group=ON;
#开启组复制
START GROUP_REPLICATION;
#关闭引导项,防止服务重启时引起新的引导导致脑裂
SET GLOBAL group_replication_bootstrap_group=OFF;
3、Mysql集群操作
mysql集群,一般指mysql部署了几个节点,实现负载均衡,如总部署5个节点数据库,挂掉1个或2个对业务不会造成影响,而挂掉半数以上则集群挂掉,业务就不可用。
linux服务器中操作数据库命令:
(1)启动:systemctl start mysql
(2) 停止:systemctl stop mysql
(3)查看主从节点状态
select * from performance_schema.replication_group_members;
(4)手动恢复集群
① 进入挂掉节点的数据库
mysql -u root -p 用户名密码:root/123(根据自己设定的用户名密码操作)
②启动节点
stop GROUP_REPLICATION; start GROUP_REPLICATION; 若无法加入成功,reset master/slave操作一次;
节点展示的一直是recover状态时,可以查看日志是否有报错,没有报错就是正常的recover: cd /var/log/mysql error.log或者error.log.1===进入mysql目录,查看日志
若报mysql超时,去主库执行这两行USE performance_schema; truncate table host_cache;
③ 重启mysqlrouter(mysqlrouter为mysql官方提供的轻量级中间件,往往负载均衡是通过mysqlrouter操作,若节点挂掉,mysqlrouter会将其移除集群)
启动mysqlrouter:sh /tmp/myrouter/start.sh
查看mysqlrouter状态:netstat -tnlp|grep 6446 netstat -tnlp|grep 6447
查看数据库状态:mysqlsh --mysqlx -u root -h localhost dba.configurelnstance() var cluster = dba.getCluster('prodCluster') cluster.status()