首页 > 数据库 >MySQL数据备份和恢复

MySQL数据备份和恢复

时间:2022-08-18 21:46:07浏览次数:54  
标签:backup -- 恢复 备份 mysql 数据备份 MySQL db02 root

MySQL数据备份和恢复

备份原因

运维工作的核心简单概括就两件事:

  1. 第一个是保护公司的数据
  2. 尽量减少数据的丢失

备份类型

  • 冷备

    1.需要停机维护,停止服务,备份数据
    2.这些备份在用户不能访问数据时进行,因此无法读取或修改数据。这些脱机备份会阻止执行任何使用数据
    的活动。这些类型的备份不会干扰正常运行的系统的性能。但是,对于某些应用程序,会无法接受必须在
    一段较长的时间里锁定或完全阻止用户访问数据。
    
  • 温备

    1.不需要停机,也不需要停服务,但是备份数据的时候,会锁表
    2.这些备份在读取数据时进行,但在多数情况下,在进行备份时不能修改数据本身。这种中途备份类型的优
    点是不必完全锁定最终用户。但是,其不足之处在于无法在进行备份时修改数据集,这可能使这种类型的
    备份不适用于某些应用程序。在备份过程中无法修改数据可能产生性能问题。
    
  • 热备(innodb)

    1.不需要停机,也不需要停服务,备份数据的时候也不会锁表
    2.这些动态备份在读取或修改数据的过程中进行,很少中断或者不中断传输或处理数据的功能。使用热备份
    时,系统仍可供读取和修改数据的操作访问。
    

备份方式

  • 逻辑备份(mysql的逻辑备份不支持增备)

    - mysqlbinlog
    - replication(主从复制)
    - into outfile(没啥用)
    	vim /etc/my.cnf
    	secure-fire-priv=/tmp
    - mysqldump
    
  • 物理备份

    - xtrabackup (percona)
    

备份策略

  • 全量备份
  • 增量备份
  • 差异备份

备份工具

1.mysqldump (逻辑备份)
mysql原生自带很好的逻辑备份工具

2.mysqlbinlog (逻辑备份)
实现binlog备份的原生态命令

3.xtrabackup (物理)
precona公司开发的性能很高的物理备份工具

备份工具-mysqldump

-u:指定用户
-p:指定密码
-h:指定主机
-s:指定socket
-P:指定端口

备份选项

# 备份所有库,全备
-A:--all-databases 

mysqldump -uroot -p123 -A > /tmp/full.sql
# 指定单库备份
-B 
mysqldump -uroot -p123 -B world > /tmp/world.sql
# 备份多个库
mysqldump -uroot -p123 -B word zh > /tmp/world.sql
# 只备份表不备份库
mysqldump -uroot -p123 world > /tmp/world.sql
# 恢复时,要指定一个数据
mysql -uroot -p123 word < /tmp/world.sql
# 备份单表world库下的city表
mysqldump -uroot -p123 world city > /tmp/city.sql

备份是刷新binlog日志

-F:刷新binlog
mysqldump -A -F > /tmp/full.sql

备份表结构

-d:仅表结构
mysqldump -A -d > /tmp/full.sql

备份表数据

-t:仅数据
mysqldump -A -t > /tmp/full.sql

打点备份

--master-data=[0|1|2]
mysqldump -A --master-data=0 > /tmp/full.sql  //关闭打点备份
mysqldump -A --master-data=1 > /tmp/full.sql //可以用来将数据恢复到准备做该库的从库上
mysqldump -A --master-data=2 > /tmp/full.sql //单词为了打点备份

快照备份

mysqldump -A --master-data=2 --single-transaction > /tmp/full.sql

特殊备份选项

-R:备份存储
--triggers:备份触发器

-x:锁表备份(温备,不用)

完整的备份语句

mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single-transaction > /tmp/full.sql

# 优化:压缩备份
mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single-transaction |gzip > /tmp/zh.sql.gz

# 恢复数据:
zcat /tmp/zh.sql.gz|mysql -uroot -p123
mysql -uroot -p123 < /tmp/full.sql

# 优化:加上日期
# 精确到天
mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single-transaction |gzip > /tmp/zh_$(date +%F-%H).sql.gz
# 精确到小时
mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single-transaction |gzip > /tmp/zh_$(date +%F-%H).sql.gz
# 精确到分钟
 mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single- transaction|gzip > /tmp/zh_$(date +%F-%H-%m).sql.gz
# 精确到秒
mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single- transaction|gzip > /tmp/zh_$(date +%F-%T).sql.gz

恢复数据到数据库操作

# 先不记录二进制日志
mysql> set sql_log_bin=0;
# 库内恢复操作
mysql> source /backup/full.sql
# 库为恢复操作
[root@db01 ~]# mysql -uroot -p123 < /backup/full.sql

# 注意:
1.mysqldump在备份和恢复时都需要MySQL实例启动为前提
2.一般数据量级100G以内,大约15-30分钟可以恢复(PB、EB就需要考虑别的方式)
3.mysqldump是以覆盖的形式恢复数据的
#!/bin/bash
num=1
while true;do
  mysql -uroot -p123 -e "insert into proc.proc value($num);commit;"
  (( num++ ))
  sleep 1
done

# 1.准备新环境
[root@m01 scripts]# ./mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data

# 2.发送全备到新环境
[root@db02 tmp]# scp zls_2022-08-18-11-45-16.sql.gz 172.16.1.61:/tmp

# 3.恢复全备到新环境
[root@m01 mysql]# zcat /tmp/zls_2022-08-18-11-45-16.sql.gz |mysql

# 4.停掉连接数据库的程序

# 5.停掉旧的数据库
[root@db02 tmp]# /etc/init.d/mysqld stop

# 6.查看全备文件,找到起始位置点
[root@db02 tmp]# zcat /tmp/zls_2022-08-18-11-45-16.sql.gz |head -25
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000013', MASTER_LOG_POS=137455268;

# 7.查看binlog文件找到结束位置点
第一段结束位置点:137471450

第二段起始位置点:137479557
第二段结束位置点:137567163

mysqlbinlog --start-position=137455268 --stop-position=137471450 mysql-bin.000013 > /tmp/inc1.sql
mysqlbinlog --start-position=137479557 --stop-position=137567163 mysql-bin.000013 > /tmp/inc2.sql

# 8.发送到新环境
scp /tmp/inc*.sql  172.16.1.61:/tmp

物理备份

Percona公司的Xtrabackup

Xtrabackup安装

# 1.下载
[root@db02 ~]# wget http://test.driverzeng.com/MySQL_Package/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm

# 2.安装
[root@db02 ~]# yum localinstall -y percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm 

# 重点
1.对于非innodb表(比如myisam) 是直接锁表cp数据文件,数据一种温备
2.对于innodb的表 (支持事务),不锁表,cp数据页最终以数据文件方式保存下来,并且把redo和undo一并备走,属于热备份
3.备份时读取配置文件/etc/my.cnf

# 老版本使用Xtrabackup会锁表属于温备
# 新版本,针对innodb有单独的备份命令innobackupex

全量备份

[root@db02 ~]# mkdir /backup
## 全备命令
[root@db02 ~]# innobackupex --user=root --password=123 --no-timestamp /backup/full
--user:指定用户
--password:指定密码
--socket:指定socket文件位置
--apply-log:模拟CSR
--copy-back:恢复数据
--no-timestamp:备份时,自定义目录名,不使用时间戳

xtrabackup_binlog_info:binlog信息文件
xtrabackup_checkpoints:备份信息文件
backup_type = full-backuped
from_lsn = 0
to_lsn = 1782897309
last_lsn = 1782897309
compact = 0
recover_binlog_info = 0

xtrabackup_info:备份详细信息
xtrabackup_logfile:redo log

## 恢复全备数据
# 手动模拟CSR,重做redo,回滚undo
[root@db02 mysql]# innobackupex --apply-log /backup/2022-08-18_14-54-23/

前提1:被恢复的目录是空的
前提2:被恢复的数据库的实例是关闭的
# 关闭数据库
[root@db02 mysql]# /etc/init.d/mysqld stop

# 保证data目录是空的
[root@db02 mysql]# rm -fr data

# 恢复全备
[root@db02 mysql]# innobackupex --copy-back /backup/2022-08-18_14-54-23/

# 修改权限
[root@db02 mysql]# chown -R mysql.mysql /application/mysql/data

增量备份

# 注意
1.基于上一次备份进行增量
2.增量备份无法单独恢复,必须基于全备进行恢复
3.所有增量必须要按顺序合并到全备当中

--incremental:开启增量备份
--incremental-basedir:指定基于上一次备份的目录

# 全备
[root@db02 ~]# innobackupex --user=root --password=123 --no-timestamp /backup/full
[root@db02 mysql]# cat /backup/full/xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 2335482456
last_lsn = 2335482456
compact = 0

## 第一次增备
[root@db02 mysql]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir /backup/full/ /backup/inc1
[root@db02 mysql]# cat /backup/inc1/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2335482456
to_lsn = 2335488029
last_lsn = 2335488029
compact = 0
recover_binlog_info = 0

## 第二次增备
[root@db02 mysql]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir /backup/inc1/ /backup/inc2

[root@db02 mysql]# cat /backup/inc2/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2335488029
to_lsn = 2335489768
last_lsn = 2335489768
compact = 0
recover_binlog_info = 0

## 第三次增备
[root@db02 mysql]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir /backup/inc2/ /backup/inc3

[root@db02 mysql]# cat /backup/inc3/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2335489768
to_lsn = 2335491513
last_lsn = 2335491513
compact = 0
recover_binlog_info = 0

恢复增备

1.full + inc1 + inc2 + inc3
2.inc1 合并到full中
3.inc2 合并到full中
4.inc3 合并到full中
5.分步骤进行--apply-log

--redo-only: 只做redo
--incremental-dir:指定增量数据的目录(要把该目录合并到full)

6.先把全备模拟CSR,只做redo 不做undo
[root@db02 mysql]# innobackupex --apply-log --redo-only /backup/full/

7.将inc1合并到全备,只做redo 不做undo
[root@db02 mysql]# innobackupex --apply-log --redo-only --incremental-dir=/backup/inc1 /backup/full

8.将inc2合并到全备,只做redo 不做undo
[root@db02 mysql]# innobackupex --apply-log --redo-only --incremental-dir=/backup/inc2 /backup/full

9.将inc3合并到准备,redo和undo都做
[root@db02 mysql]# innobackupex --apply-log --incremental-dir=/backup/inc3 /backup/full

10.将全备目录,整体做一次redo和undo
[root@db02 mysql]# innobackupex --apply-log  /backup/full

11.恢复数据
[root@db02 mysql]# /etc/init.d/mysqld stop
[root@db02 mysql]# rm -fr /application/mysql/data
[root@db02 mysql]# innobackupex --copy-back /backup/full/
[root@db02 mysql]# chown -R mysql.mysql  /application/mysql/data
[root@db02 mysql]# /etc/init.d/mysqld start

差异备份

# 全备
[root@db02 mysql]# innobackupex --user=root --password=123 --no-timestamp /backup/full1
[root@db02 mysql]# cat /backup/full1/xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 2335492165
last_lsn = 2335492165
compact = 0
recover_binlog_info = 0

# 第一次差异备份
[root@db02 mysql]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir /backup/full1 /backup/chayi1
[root@db02 mysql]# cat /backup/chayi1/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2335492165
to_lsn = 2335497745
last_lsn = 2335497745
compact = 0
recover_binlog_info = 0

## 第二次差异备份
[root@db02 mysql]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir /backup/full1 /backup/chayi2
[root@db02 mysql]# cat /backup/chayi2/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2335492165
to_lsn = 2335501775
last_lsn = 2335501775
compact = 0
recover_binlog_info = 0

## 第三次差异备份
[root@db02 mysql]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir /backup/full1 /backup/chayi3
[root@db02 mysql]# cat /backup/chayi3/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2335492165
to_lsn = 2335505723
last_lsn = 2335505723
compact = 0
recover_binlog_info = 0

差异备份恢复

1.关闭数据库
[root@db02 mysql]# /etc/init.d/mysqld stop

2.清空data目录
[root@db02 mysql]# rm -fr /application/mysql/data

3.先将全备只做redo不做undo
[root@db02 mysql]# innobackupex --apply-log --redo-only /backup/full1

4.合并最后一次差异备份,redo和undo都做
[root@db02 mysql]# innobackupex --apply-log  --incremental-dir=/backup/chayi3 /backup/full1

5.将全备,redo和undo都做一次
[root@db02 mysql]# innobackupex --apply-log  /backup/full1

6.恢复数据
[root@db02 mysql]# innobackupex --copy-back  /backup/full1

7.授权
[root@db02 mysql]# chown -R mysql.mysql /application/mysql/data

8.启动数据库
[root@db02 mysql]# /etc/init.d/mysqld start

模拟用户写数据

[root@db02 backup]# vim /root/mysql.sh 
#!/bin/bash
num=1
while true;do
  mysql -uroot -p123 -e "insert into zls.chayi value($num);commit;"
  (( num++ ))
  sleep 1
done

## 全备
[root@db02 backup]# innobackupex --user=root --password=123 --no-timestamp /backup/full2
[root@db02 backup]# cat /backup/full2/xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 2335532269
last_lsn = 2335535141
compact = 0
recover_binlog_info = 0

## 第一次增备
[root@db02 backup]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir /backup/full2 /backup/zls_inc1
[root@db02 backup]# cat /backup/zls_inc1/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2335532269
to_lsn = 2335575438
last_lsn = 2335575438
compact = 0
recover_binlog_info = 0

## 第二次增备
[root@db02 backup]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir /backup/zls_inc1 /backup/zls_inc2
[root@db02 backup]# cat /backup/zls_inc2/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2335575438
to_lsn = 2335597445
last_lsn = 2335597445
compact = 0
recover_binlog_info = 0

恢复步骤

1.先停库,避免业务二次伤害
[root@db02 backup]# /etc/init.d/mysqld stop
2.准备新环境

3.清空data目录
[root@db02 backup]# mv /application/mysql/data /opt/

4.将全备只做redo不做undo
[root@db02 backup]# innobackupex --apply-log --redo-only /backup/full2

5.将zh_inc1合并到full2中,只做redo不做undo
[root@db02 backup]# innobackupex --apply-log --redo-only --incremental-dir=/backup/zh_inc1 /backup/full2

6.将zh_inc2合并到full2中,redo和undo都做
[root@db02 backup]# innobackupex --apply-log --incremental-dir=/backup/zls_inc2 /backup/full2

7.将full2整体,redo和undo都做
[root@db02 backup]# innobackupex --apply-log /backup/full2

8.恢复数据
[root@db02 backup]# innobackupex --copy-back /backup/full2

9.授权
[root@db02 backup]# chown -R mysql.mysql /application/mysql/data

10.启动数据库
[root@db02 backup]# /etc/init.d/mysqld start

11.查询数据
mysql> select * from zls.chayi;
246 rows in set (0.01 sec)

12.截取binlog
起始位置点:
[root@db02 full2]# cat /backup/full2/xtrabackup_binlog_pos_innodb
mysql-bin.000001	45318

结束位置点:
[root@db02 data]# mysqlbinlog -vvv --base64-output=decode-row mysql-bin.000001 
54432

起始位置点:54524
结束位置点:61778

[root@db02 data]# mysqlbinlog --start-position=45318 --stop-position=54432 mysql-bin.000001 > /backup/binlog1.sql
[root@db02 data]# mysqlbinlog --start-position=54524 --stop-position=61778 mysql-bin.000001 > /backup/binlog2.sql

作业

1.企业故障恢复案例

背景:
正在运行的网站系统,MySQL数据库,数据量25G,日业务增量10-15M。

备份策略:
每天23:00,计划任务调用mysqldump执行全备脚本

故障时间点:
上午10点开发人员误删除一个核心业务表,如何恢复?

1.准备新环境
/application/mysql-5.7.38/bin/mysqld --defaults-file=/etc/my.cnf  --initialize-insecure  --user=mysql --basedir=/application/mysql-5.7.38 --datadir=/application/mysql-5.7.38/data
2.将全备的数据发送到新环境中
scp /tmp/Mysql.sql.gz  172.16.1.51:/tmp/
3.恢复全备到新环境
[root@db01 /application/mysql]# zcat /tmp/Mysql.sql.gz |mysql
4.停掉连接数据库的程序和旧的数据库
[root@db03 mysql]# systemctl stop mysqld
5.查看全备文件,找到起始位置
[root@db03 mysql]# zcat /tmp/Mysql.sql.gz |head -25
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=15592;
6.查看binlog文件找到结束位置点
第一段结束点:41737
第二段起始点:41870
第二段结束点:47464
7.恢复数据
[root@db03 mysql]# mysqlbinlog --start-position=15592 --stop-position=41737 mysql-bin.000002 > /tmp/inc1.sql
[root@db03 mysql]# mysqlbinlog --start-position=41870 --stop-position=47464 mysql-bin.000002 > /tmp/inc2.sql
8.发送到新环境
[root@db03 mysql]# scp /tmp/inc* 172.16.1.51:/tmp
9.导入数据
[root@db01 /application/mysql]# mysql < /tmp/inc1.sql 
[root@db01 /application/mysql]# mysql < /tmp/inc2.sql
10.查询数据
mysql> select * from jl1.stu;
11.将数据库导出发送到旧数据库中
[root@db01 /application/mysql]# mysqldump -B jl1 > /opt/jl.sql
[root@db01 /application/mysql]# scp /opt/jl.sql 172.16.1.53:/tmp/
12.启动旧数据库
[root@db03 mysql]# systemctl start mysqld
12.在旧数据库中将数据导入
[root@db03 mysql]# mysql -uroot -p456 < /tmp/jl.sql

2.企业级增量恢复实战**

背景:
某大型网站,mysql数据库,数据量500G,每日更新量100M-200M

备份策略:
xtrabackup,每周六0:00进行全备,周一到周五及周日00:00进行增量备份。

故障场景:
周三下午2点出现数据库意外删除表操作。

**如何恢复???

1.周六全备数据
[root@db01 backup]# innobackupex --user=root --password=456 --no-timestamp /backup/full
2.周一到周五进行增量备份
[root@db01 backup]# innobackupex --user=root --password=456 --no-timestamp --incremental --incremental-basedir /backup/full /backup/inc1

[root@db01 lib]# innobackupex --user=root --password=456 --no-timestamp --incremental --incremental-basedir /backup/inc1 /backup/inc2

3.移走data目录
[root@db01 backup]# mv arb/mysql /backup/

4.将全备只做redo不做undo
[root@db02 backup]# innobackupex --apply-log --redo-only /backup/full

5.将Inc1合并到full中,只做redo不做undo
[root@db01 backup]# innobackupex --apply-log --redo-only --incrementaldir=/backup/inc1 /backup/full

6.将inc2合并到full中,redo和undo都做
[root@db02 backup]# innobackupex --apply-log --incremental-dir=/backup/zls_inc2 /backup/full

7.将full2整体,redo和undo都做
[root@db02 backup]# innobackupex --apply-log /backup/full

8.恢复数据
[root@db02 backup]# innobackupex --copy-back /backup/full

9.授权
[root@db01 backup]# chown -R mysql.mysql arb/mysql

10.启动数据库
[root@db01 backup]# systemctl start mysqld

11.查询数据
mysql> show databases;

12.截取binlog
起始位置点:
[root@db02 full2]# cat /backup/full2/xtrabackup_binlog_pos_innodb
mysql-bin.000001 45318

结束位置点:
[root@db02 data]# mysqlbinlog -vvv --base64-output=decode-row mysql-bin.000001
54432

起始位置点:54524
结束位置点:61778

[root@db02 data]# mysqlbinlog --start-position=45318 --stop-position=54432 mysqlbin.000001 > /backup/binlog1.sql
[root@db02 data]# mysqlbinlog --start-position=54524 --stop-position=61778 mysqlbin.000001 > /backup/binlog2.sql

标签:backup,--,恢复,备份,mysql,数据备份,MySQL,db02,root
From: https://www.cnblogs.com/ghjhkj/p/16600224.html

相关文章

  • MySQL可视化软件(Navicat)部署与使用、python操作MySQL数据库连接(pymysql)
    目录一、Navicat可视化软件1.什么是可视化软件?2.什么是Navicat?二、使用Navicat操作MySQL1.Navicat连接本地2.连接成功后进行后续的操作3.可以直观的看到表与表之间的关系三......
  • MySQL的数据备份
    MySQL数据备份和恢复备份原因1)备份就是为了恢复。2)尽量减少数据的丢失(公司的损失)备份类型#冷备需要停机维护,停止服务,备份数据#温备不需要停机,也不需要停服务,但......
  • Mysql使用实际02---SQL表连接
    1.表连接的常见类型在SQL语句中,关于表连接,若按照表的数量来划分,可以划分为单表连接、两表连接和两表以上连接。关于表连接有很多种类,主要分为交叉连接,内连接,外连接(左外......
  • Sqoop导入数据到mysql
    1.进入Sqoop安装目录执行bin/sqooplist-databases--connectjdbc:mysql://node1:3306/--usernameroot--passwordhadoop  #启动Sqoop连接mysql2.在虚拟机mysql中......
  • MYSQL练习题(45题)
    建表语句--学生表StudentcreatetableStudent(SIdvarchar(10),Snamevarchar(10),Sagedatetime,Ssexvarchar(10));insertintoStudentvalues('01','赵雷',......
  • MySQL多表查询与python操作MySQL
    一、navicateNavicate是一套可创建多个连接的数据库管理工具,用以方便管理 MySQL、Oracle、PostgreSQL、SQLite、SQLServer、MariaDB 和 MongoDB 等不同类型的数据库......
  • pt-heatbeat 监控 mysql 主从延迟
    pt-heartbeat监控MySQL主从延迟mysql在进行主从同步时,从库需要拉取主库的binlog进行sql回放,因此理论上只要主库存在数据更新,就一定存在主从延迟。mysql提供了Sec......
  • 【MySQL】什么是子查询
    目录1.谁的工资比Abel的高?2.子查询的分类1.谁的工资比Abel的高?方式一:先查询Abel的工资,再查比Abel工资高的员工SELECTsalaryFROMemployeesWHERElast_name='Abel'......
  • Navicat,pymysql,SQL注入问题
    Navicat可视化软件什么是Navicat?pyton操作MySQLSQL注入问题小知识点补充Navicat可视化软件什么是Navicat?1.Navicat是一个可多重连接的数据库管理工......
  • 【MySQL】SQL99版本新特性:自然连接、USING
    1.自然连接NATURALJOIN:它会帮你自动查询两张连接表中所有相同的字段,然后进行等值连接。不够灵活。SELECTemployee_id,last_name,department_nameFROMemployeese......