1.ubuntu安装mysql
sudo apt-get install mysql-server
查看mysql 状态
systemctl status mysql
登录mysql
sudo mysql -u root -p
2.访问mysql需要加sudo
sudo mysql -uroot -p
命令行修改root密码:
mysql> use mysql;
mysql> select user, host from user;
mysql> UPDATE mysql.user set plugin='mysql_native_password' WHERE user='root';
mysql> FLUSH PRIVILEGES;
mysql -uroot -p
查看版本
mysql> select version();
3.远程访问
步骤01. vim /etc/mysql/mysql.conf.d/mysqld.cnf
修改配置文件mysqld.conf, 注释掉:
#bind_address=127.0.0.1 表示只允许本地访问,注释掉该行
步骤02.
打开MySQL root用户的远程访问权限:
use mysql;
update user set host = "%" where user = "root";
flush privileges;
关闭MySQL root用户远程访问权限
use mysql;
update user set host = "localhost" where user = "root" and host = "%";
--delete from user where user = "root" and host = "%";;
flush privileges;
reload #不关闭UNIT的情况下重新载入配置文件,让配置生效,只重新加载.conf类的文件
重启mysql服务或者重新载入配置文件
创建库
1.创建数据库
show variables like '%character%';
create database if not exists my_database default character set = 'utf8';
2.创建用户: 命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';
create user '用户'@'%' identified by '密码';
grant all privileges on *.* to '用户'@'%' ;
FLUSH PRIVILEGES;
3.其他
show databases;
show global variables like 'wait_timeout';
-- show status \G
--show charset;
加载数据
LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE
FIELDS TERMINATED BY '\t'
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
set update_time=NOW()
;
delete from data_dem where id = 122;
truncate table data_dem;
select * from data_dem limit 10 \G
select count(1) from data_dem ;
alter database data_dem character set utf8mb4;
排查
查看网络情况
ip ping
port sudo lsof -i:3306
iptables
###查看mysql情况
服务状态 systemctl status mysql
是否开放远程连接 /etc/mysql/mysql.conf.d/mysqld.cnf
配置文件
default-authentication-plugin=mysql_native_password
character-set-server=utf8
character-set-filesystem=utf8
max_connections=1000
mysql集群
主从复制 多主复制或环形复制
主从复制技术
01.master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
02.slave 将 master 的 binary log events 拷贝到它的中继日志(relay log) ;
03.slave重做中继日志中的事件,将改变应用到自己的数据库中。MySQL复制是异步的且串行化的
04.slave会从master读取binlog来进行数据同步
复制的原则
每个slave只有一个master
每个slave只能有一个唯一的服务器ID
每个master可以有多个salve
1.配置文件
主服务器配置
1.【必须】主服务器唯一ID
server-id =1
2.【必须】启用二进制日志 log_bin = /mysql/log/mysql-bin
log-bin=自己本地的路径/mysqlbin
例如: log_bin=master-bin 把这段话必须放到 [mysqld] 标签下
-- log-bin配置项表示binlog的base name,产生的日志文件名称类似,master-bin.00001,master-bin.00002,master-bin.00003
-- sync_binlog=1了,表示每次事务提交,MySQL都会把binlog刷下去,是最安全但是性能损耗最大的设
log_bin=master-bin
server-id=1
sync_binlog=1
从服务器配置
1.【必须】从服务器唯一ID
server-id=2
2.主从中的mysql内执行命令配置
01.在主机上建立账户并授权slave
02.从机执行
change master 用于配置和改变 slave 服务器用于连接 master 服务器的参数,
以便 slave服务器读取 master 服务器的 binlog 及 slave 服务器的 relay log。
同时更新 master.info 及 relay-log.info信
执行 change master 命令后的信息保存在 master.info 和 relay-log.info 两个文件中
3. MySQL 查询
mysql> show variables like 'log_bin';
-- show master status命令列出了日志位点信息,包括binlog file,binlog position等
mysql> show master status -- log-bin的配置名称
-- server是slave,则执行show slave status中
mysql > show slave status\G
4.说明
01. MySQL Replication在Master端开启binlog,
Mster把它的二进制日志传递给slaves来达到master-slave数据一致的目的。
02.通过使用mysqlbinlog工具来使恢复数据
03.日志位置
binlog是二进制文件,普通文件查看器cat more vi等都无法打开,须使用自带的 mysqlbinlog 命令查看
binlog日志与数据库文件在同目录中
mysql> show binlog events in
参考:
ubuntu18.04每次访问mysql需要加sudo问题 https://www.cnblogs.com/wlzx-dic/p/14068364.html
MySQL允许远程访问 https://www.cnblogs.com/Deaseyy/p/13420245.html
mysql中如何在创建数据库的时候指定数据库的字符集 https://www.cnblogs.com/bulh/articles/10609198.html