root@ytt-ubuntu18:/home/ytt# mysql -u ytt_no_pass -e "select user()" +-----------------------+ | user root@ytt-ubuntu18:/home/ytt# cat /etc/mysql/conf.d/mysql.cnf [mysql] prompt=mysql:\d:\v> user=ytt password root@ytt-ubuntu18:/home/ytt# export MYSQL_PWD=root MYSQL_TCP_PORT=3340 root@ytt-ubuntu18:/home/ytt root@ytt-ubuntu18:/home/ytt# mysql_config_editor set -G user_ytt -S /var/run/mysqld/mysqld.sock -u ytt root@ytt-ubuntu18:/home/ytt# mysql --login-path=user_ytt -e 'select user()' +---------------+ | user(
ytt的所有权限。 MySQL : root@ytt-ubuntu:~# mysql -u ytt_fake -pytt -hytt-ubuntu ... :用户实际上是 ytt_real 。 比如用户 ytt_real 使用 proxy 用户 ytt_fake ,用户 ytt_real_other 也想使用 ytt_fake ,此时用户 ytt_fake 连接 MySQL 后,真实用户依然是 ytt_real ,直到用户 ytt_real 被删除,才会轮到第二个用户。
; Query OK, 0 rows affected (0.01 sec) 创建三个普通用户,分别为 ytt1、ytt2、ytt3。 mysql> create user ytt1 identified by 'ytt',ytt2 identified by 'ytt',ytt3 identified by 'ytt'; Query 以下分别创建两个用户 ytt8、ytt9,一个给 create role,一个给 create user 权限。 -- 管理员登录,创建用户ytt8,ytt9. .* to ytt11; Query OK, 0 rows affected (0.01 sec) -- 把ytt11普通用户的权限授予给ytt12 mysql> grant ytt11 ON *.* TO `ytt12`@`%` | | GRANT SELECT ON `ytt_new`.* TO `ytt12`@`%` | | GRANT `ytt11`@
创建一套 MICS ,命名为:ytt-rc-set ,主库为 ytt-rc1 。 * Creating InnoDB ClusterSet 'ytt-rc-set' on 'ytt-rc1'... 的最新状态:ytt-rc1 为主,ytt-rc2 为备。 to `ytt`. The PRIMARY instance is '127.0.0.1:3384' 看下 ytt-rc-set 最新状态:ytt-rc1 变为备,新主为 ytt-rc2 。
创建一套 MICS ,命名为:ytt-rc-set ,主库为 ytt-rc1 。 * Creating InnoDB ClusterSet 'ytt-rc-set' on 'ytt-rc1'... 的最新状态:ytt-rc1 为主,ytt-rc2 为备。 to `ytt`. The PRIMARY instance is '127.0.0.1:3384' 看下 ytt-rc-set 最新状态:ytt-rc1 变为备,新主为 ytt-rc2 。
举个例子,用户 ytt_u1 拥有的权限数据如下: mysql:(none)>show grants for ytt_u1; +------------------------------------- ----------------+ 1 row in set (0.00 sec) 用 grant 语句来给用户 ytt_u1 赋予数据库 ytt 的只读权限: mysql:(none)>grant select on ytt.* to ytt_u1; Query OK, 0 rows affected (0.20 sec) 查看用户 ytt_u1的权限数据:数据已经同步为最新。 mysql:(none)>show grants for ytt_u1; +-----------------------------------------+ | Grants for ytt_u1@ `%` | | GRANT SELECT ON `ytt`.* TO `ytt_u1`@`%` | +-----------------------------------------+ 2
(0.17 sec) 接下来用户 ytt 分别使用备密码与主密码连接 MySQL 并且执行一条简单的 SQL 语句: 备密码连接数据库: root@ytt-ubuntu:/home/ytt# mysql '; Query OK, 0 rows affected (0.16 sec) root@ytt-ubuntu:/home/ytt# mysql -h ytt-ubuntu -u ytt -proot_old :/home/ytt# mysql -h ytt-ubuntu -u ytt -proot_new -e "select 'hello world'" mysql: [Warning] Using a ) root@ytt-ubuntu:/home/ytt# mysql -h ytt-ubuntu -u ytt -proot_old -e "select 'hello world'" mysql: ERROR 1045 (28000): Access denied for user 'ytt'@'ytt-ubuntu' (using password: YES) root@ytt-ubuntu:/
(0.00 sec) <mysql:ytt:5.7.34-log> create table trans2 as select * from trans1; ERROR 1786 示例如下: <mysql:ytt:5.7.34-log> reset master; Query OK, 0 rows affected (0.02 sec) mysql:ytt:5.7.34 -log> create table trans2 like trans1; Query OK, 0 rows affected (0.02 sec) <mysql:ytt:5.7.34-log 0 对应的 binlog 数据如下,拆分为两个 GTID 事务号:00020135-1111-1111-1111-111111111111:1-2 ```mysql <mysql:ytt 直接在事务块里执行会报错: ```mysql <mysql:ytt:5.7.34-log> begin; Query OK, 0 rows affected (0.00 sec) <
(0.00 sec) <mysql:ytt:5.7.34-log> create table trans2 as select * from trans1; ERROR 1786 示例如下: <mysql:ytt:5.7.34-log> reset master; Query OK, 0 rows affected (0.02 sec) mysql:ytt:5.7.34-log > create table trans2 like trans1; Query OK, 0 rows affected (0.02 sec) <mysql:ytt:5.7.34-log> insert 直接在事务块里执行会报错: <mysql:ytt:5.7.34-log> begin; Query OK, 0 rows affected (0.00 sec) <mysql: <mysql:ytt:5.7.34-log> create temporary table tmp(id int,log_date date); Query OK, 0 rows affected
进入 MySQL X 端口 40100 root@ytt-pc:/home/ytt/scripts# mysqlsh mysqlx://ytt@ytt-pc:40100 MySQL Shell 8.0.19 * Checking MySQL instance at ytt-pc:4010 This instance reports its own address as ytt-pc:4010 ytt-pc 用同样的方法添加实例 C MySQL ytt-pc:40100+ ssl JS > c1.addInstance('ytt@ytt-pc:4012') 接下来看看新的主从状态,此时 ytt-pc:4010 提升从机为新主机,这里操作的实例是 ytt-pc:4012 MySQL ytt-pc:40100+ ssl JS > c1.setPrimaryInstance('ytt@ytt-pc:4012') :4010 to replicate from ytt-pc:4012 ** Changing replication source of ytt-pc:4011 to ytt-pc:4012 ytt-pc
| ytt_sample | PRIMARY | 100 | | ytt | ytt_sample | idx_u1 | 97 | | ytt | ytt_sample | idx_u1 | 91 | | ytt | ytt_sample | idx_r6 | 85 | | ytt | ytt_sample | idx_u1 | 29 | | ytt | ytt_sample 503 | | ytt | ytt_sample | idx_u1 | 98 | | ytt | ytt_sample | idx_u1 | 92 | | ytt | ytt_sample | idx_u2 | 79 | | ytt | ytt_sample
- 1 ytt ytt 112K 6月 1 14:03 t0.ibd 2229718 -rw-r----- 1 ytt ytt 28M 6月 1 16:14 t1.ibd 2229719 -rw-r ----- 1 ytt ytt 36M 6月 1 16:16 t2.ibd 2229720 -rw-r----- 1 ytt ytt 40M 6月 1 16:16 t3.ibd 2229721 -rw-r----- 1 ytt ytt 44M 6月 1 16:16 t4.ibd 2229722 -rw-r----- 1 ytt ytt 52M 6月 1 16:03 t5.ibd 2229723 -rw-r----- 1 ytt ytt 56M 6月 1 16:06 t6.ibd 2229725 -rw-r----- 1 ytt ytt 60M 6月 1 15:25 t8.ibd 2229724 -rw-r----- 1 ytt ytt 64M 6月 1 16:08 t7.ibd 2229734 -rw-r----- 1 ytt ytt 68M 6月 1
比如导出单个数据库 ytt: mysqldump ytt > /tmp/ytt.sql; 恢复也非常简单:mysql < /tmp/ytt.sql 缺点是备份速度慢。 ) # 备份路径 backup_path='/tmp/ytt_backup_instance'; # 备份选项,定义一致性,不包含哪些数据库,线程数等等。 load_dump 备份好了后,用 load_dump 恢复下数据库 ytt 的备份集, # 删除原数据库 mysql> drop database ytt; Query OK, 8 rows affected (0.27 sec) # 创建指定数据库ytt. mysql> create database ytt; Query OK, 1 row affected (0.01 sec) # 用于恢复的备份集目录 restore_url = '/tmp/ytt_backup_schemas' # 恢复选项:是否对恢复的表做样例数据收集,是否延迟建立索引,恢复指定的数据库等。
# mysql -S /tmp/mysqld_3306.sock -D ytt_big -e "select id from ytt_t0" -ss >ytt_t0_ids.txt root@debian-ytt1 数据端克隆张新表 ytt_t1,更新最大 ID 为 10W。 :/var/lib/mysql# time mysql -S /tmp/mysqld_3306.sock -D ytt_big -e "select id from ytt_t1" -ss >ytt_t1 ) AS result -> FROM -> ytt_t0 -> RIGHT JOIN ytt_seq USING (id) -> WHERE ytt_t0.id ytt_seq.id AS result -> FROM -> ytt_t1 -> RIGHT JOIN ytt_seq USING (id) -> WHERE
: root@ytt-ubuntu:/home/ytt# mysql -S /opt/mysql/mysqld.sock Welcome to the MySQL monitor. mysql:(none)>create user ytt_dev identified by 'root123'; Query OK, 0 rows affected (0.15 sec) 退出连接, 用户 ytt_dev 重新连接数据库,并且更改两次密码: root@ytt-ubuntu:/home/ytt# mysql -uytt_dev -hytt-ubuntu -proot123 mysql: :(none)>\q Bye 以用户 ytt_dba 登录数据库,并且改了五次密码: root@ytt-ubuntu:/home/ytt# mysql -uytt_dba -hytt-ubuntu - 和 ytt_dba1 : mysql:(none)>create user ytt_dev1 identified by 'root123'; Query OK, 0 rows affected (0.04
root@ytt-ubuntu18:/home/ytt# mysql -u ytt_no_pass -e "select user()"+-----------------------+| user() root@ytt-ubuntu18:/home/ytt# export MYSQL_PWD=root MYSQL_TCP_PORT=3340 root@ytt-ubuntu18:/home/ytt root@ytt-ubuntu18:/home/ytt# mysql_config_editor set -G user_ytt -S /var/run/mysqld/mysqld.sock -u ytt root@ytt-ubuntu18:/home/ytt# mysql --login-path=user_ytt -e 'select user()'+---------------+| user() ytt# su ytt ytt@ytt-pc-big:~$ mysql -e "select user(),current_user()" +---------------+-------
denied for user 'test1'@'localhost' (using password: NO) root@ytt-ubuntu:/home/ytt# mysql -utest1 (0.14 sec) 代理用户连续输错两次密码,账号被锁住: root@ytt-ubuntu:/home/ytt# mysql -u ytt_fake -p -hytt-ubuntu Enter ) root@ytt-ubuntu:/home/ytt# mysql -u ytt_fake -p -hytt-ubuntu Enter password: ERROR 3955 ( HY000): Access denied for user 'ytt_fake'@'ytt-ubuntu'. root@ytt-ubuntu:/home/ytt# mysql -u ytt_real -p -hytt-ubuntu -e "select 'hello world\!'"
root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl 总用量 3.0G 3541825 861M -rw-r----- 1 mysql mysql 860M -(ytt/3305)->insert into c1 values (b'0'); Query OK, 1 row affected (0.01 sec) mysql-(ytt/3305 root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl 总用量 1.9G 4085684 933M -rw-r----- 1 mysql mysql 932M mysql-(ytt/3305)->insert into t7 values (1); Query OK, 1 row affected (0.40 sec) mysql-(ytt/3305 mysql-(ytt/3305)->select ytt_sample_data_type(1111,222) 'result'; +--------------------------+ |
命令即可: root@ytt-ubuntu:~# mysql -uytt_admin -proot1234 -P5734 -h ytt-ubuntu -e "alter user ytt_admin 这样的密码更改行为其实不是很安全,假设有下面的场景出现: 用户 ytt_admin 登录到 MySQL 服务后,做了些日常操作,完成后忘记退出;此时刚好有一个别有用心的用户 ytt_fake 进入 ytt_admin 的登录环境,直接敲命令 alter user 即可更改用户 ytt_admin 的密码,并且退出当前登录环境,用户 ytt_admin 本尊再次登录 MySQL ,就会提示密码错误,不允许登录,此时用户 ytt_admin 大脑肯定是懵的。 root@ytt-ubuntu:/home/ytt# mysql -h ytt-ubuntu -uytt_admin -proot123 mysql: [Warning] Using a password
.000003, end_log_pos 1105; Could not execute Write_rows event on table ytt.t1; Duplicate entry '10' for (25) : 25Metadata Locks:---------------GRANTED SHARED_WRITE on ytt.t1Data Locks:-----------GRANTED TABLE (IX) LOCK ON ytt.t1GRANTED RECORD (X) LOCK ON ytt.t1 (PRIMARY) (id=supremum pseudo-record) (id=10)BLOCKING RECORD (X,REC_NOT_GAP) LOCK ON ytt.t1 FOR 12 SECONDS (mysql_thread_id: 29)Statement we (IX) LOCK ON ytt.t1WAITING RECORD (X,REC_NOT_GAP) LOCK ON ytt.t1 (PRIMARY) (id=10)BLOCKED FOR 8 SECONDS