/*查看改用户的所有权限*/
show grants for 'root'@'localhost';
/*设置匹配所有权限*/
grant all privileges on *.* to 'root'@'%';
/*刷新权限*/
flush privileges;
bin/mysqld --defaults-file=/usr/local/mysql2/my.cnf --initialize --user=mysql
#得到密码后登录服务器 设置全域访问并修改密码,此时安装完成
| 文件名 | 目的 |
|---|---|
| /etc/my.cnf | 全局选项 |
| /etc/mysql/my.cnf | 全局选项 |
| SYSCONFDIR/my.cnf | 全局选项 |
| $MYSQL_HOME/my.cnf | 服务器特定选项(仅限服务器) |
| defaults-extra-file | 用 指定的文件 --defaults-extra-file,如果有的话 |
| ~/.my.cnf | 用户特定选项 |
| ~/.mylogin.cnf | 用户特定的登录路径选项(仅限客户端) |
mysql 数据库是系统数据库,包含存储 MySQL 服务器运行时所需信息的表。
表作用分为一下几类:
重点说一下 复制系统的表,以方便我们日后学习 数据库的 读写分离。
gtid_executed:用于存储 GTID 值的表,使用 InnoDB存储引擎。
ndb_binlog_index: NDB Cluster 复制的二进制日志信息。
slave_master_info, slave_relay_log_info, slave_worker_info: 用于在副本服务器上存储复制信息。
| Log Type | Information Written to Log |
|---|---|
| Error log | 启动、运行或停止 mysqld时遇到的问题日志 |
| General query log | 已建立的客户端连接和从客户端收到的语句 |
| Binary log | 更改数据的语句 |
| Relay log | 从复制源服务器接收的数据 |
| Slow query log | 执行时间超过 long_query_time几秒钟的查询 |
| DDL log (metadata log) | DDL 语句执行的元数据操作 |
开启通用日志功能
log_output=FILE
general_log=ON
general_log_file=general.log
更改 bin log 格式的注意事项
针对不同的存储引擎设置不同的日志格式
| 存储引擎 | ROW | STATEMENT |
|---|---|---|
| ARCHIVE | 是的 | 是的 |
| BLACKHOLE | 是的 | 是的 |
| CSV | 是的 | 是的 |
| EXAMPLE | 是的 | 不 |
| FEDERATED | 是的 | 是的 |
| HEAP | 是的 | 是的 |
| InnoDB | 是的 | 是,当事务隔离级别为 REPEATABLE READ或 时SERIALIZABLE;否则没有。 |
| MyISAM | 是的 | 是的 |
| MERGE | 是的 | 是的 |
| NDB | 是的 | 不 |
bin log 在以下时机会生成新的bin log 日志,小标从1开始自增
bin log 日志的记录动作是在未提交的事务中,所有更改都将被缓存,直到 服务器接收到提交语句。mysqld在执行之前将整个事务写入二进制日志 。 当处理事务的线程启动时,它会binlog_cache_size为缓冲区语句分配一个缓冲区。如果语句大于此值,则线程会打开一个临时文件来存储事务。线程结束时删除临时文件。
binlog 配置
server-id=1
log-bin=/usr/local/mysql/mysql-files/binLog
log_bin_index=/usr/local/mysql/mysql-files/binLogIndex
binlog_cache_size=4096
max_binlog_cache_size=4096
sync_binlog=1
binlog_format=MIXED
/* 设置全局变量开启bin log*/
SET GLOBAL log_bin = ON;
#慢查询日志
slow_query_log=ON
long_query_time=10
min_examined_row_limit=10000
slow_query_log_file=slow.log
log_output=FILE
#备份所有数据库
./bin/mysqldump --all-databases -uroot -p > dump.sql
#备份指定的数据库
mysqldump --databases db1 db2 db3 > dump.sql
#刷新并备份数据
mysqldump --single-transaction --flush-logs --master-data=2 --all-databases > backup_sunday_1_PM.sql
#备份并删除 二进制文件
mysqldump --single-transaction --flush-logs --master-data=2 --all-databases --delete-master-logs > backup_sunday_1_PM.sql
# 导入sql
mysql < dump.sql
#sql 中不包含创建表的语句的话
mysqladmin create db1
mysql db1 < dump.sql
#或
CREATE DATABASE IF NOT EXISTS db1;
USE db1;
source dump.sql
/*查看所有日志*/
SHOW BINARY LOGS;
/*查看当前日志 */
SHOW MASTER STATUS;
flush logs;
全量恢复
/*增量备份恢复 方式一*/
mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p
/*增量备份恢复 方式二*/
mysqlbinlog binlog.000001 > /tmp/statements.sql
mysqlbinlog binlog.000002 >> /tmp/statements.sql
mysql -u root -p -e "source /tmp/statements.sql"
使用事件位置的时间点恢复
mysqlbinlog --start-datetime="2020-05-27 12:59:00" --stop-datetime="2020-05-27 13:06:00" \
--verbose /var/lib/mysql/bin.123456 | grep -C 12 "DROP TABLE"
# 恢复到指定的事件点
mysqlbinlog --start-position=4 --stop-position=1548 binLog.000006 | mysql -u root -p
#从指定的事件点开始
mysqlbinlog --start-position=3137 binLog.000006 | mysql -u root -p
提示 在执行备份的之前尽量手动执行一下 flush logs; 生成新的备份文件,避免binLog 的重复记录
每个InnoDB表都有一个特殊的索引,称为聚集索引,用于存储行数据。通常,聚集索引与主键同义。
聚集索引以外的索引称为二级索引。在InnoDB中,二级索引中的每条记录都包含该行的主键列,以及为二级索引指定的列。 InnoDB使用此主键值在聚集索引中搜索行。
CREATE USER 'repl'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
./bin/mysqldump --all-databases -uroot -p > dump.sql
[mysqld]
port=3307
datadir=/usr/local/mysql2/mysql-files
socket=/tmp/mysql2.sock
risks
symbolic-links=0
#server id
server-id=2
[mysqld_safe]
log-error=/usr/local/mysql2/mysql-files/mariadb.log
pid-file=/usr/local/mysql2/mysql-files/mariadb.pid
!includedir /etc/my.cnf.d
/*可以从源服务器查看*/
SHOW MASTER STATUS;
/*在从服务器上配置源服务器信息,post 和文件 */
CHANGE MASTER TO
MASTER_HOST='localhost',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='binLog.000012',
MASTER_LOG_POS=154;
START SLAVE;
完成主从配置。