一、cmake的時候加入了bostorg
二、初始化時 使用mysqld --initialize 替代mysql_install_db,其它參數沒有變化:--user= --basedir= --datadir=
三、--initialize會生成一個臨時密碼
四、還能夠用另一個參數--initialize-insecuremysql
[root@db02 mysql-5.7.20]# yum install -y gcc gcc-c++ automake autoconf [root@db02 mysql-5.7.20]# yum install make cmake bison-devel ncurses-devel libaio-devel [root@db02 mysql-5.7.20]# wget httpss://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_59_0.tar.gz #登陸boost.org下載也能夠 [root@db02 mysql-5.7.20]# tar xf boost_1_59_0.tar.gz -C /usr/local/ [root@db02 mysql-5.7.20]# cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.7.20 \ -DMYSQL_DATADIR=/application/mysql-5.7.20/data \ -DMYSQL_UNIX_ADDR=/application/mysql-5.7.20/tmp/mysql.sock \ -DDOWNLOAD_BOOST=1 \ -DWITH_BOOST=/usr/local/boost_1_59_0 \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ -DWITH_ZLIB=bundled \ -DWITH_SSL=bundled \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DENABLE_DOWNLOADS=1 \ -DWITH_DEBUG=0
1)登錄系統
2)管理系統文件linux
1)建立用戶:useradd adduser
2)刪除用戶:userdel
3)修改用戶:usermodc++
1)登錄MySQL數據庫
2)管理數據庫對象sql
1)建立用戶:create user
2)刪除用戶:delete user drop user
3)修改用戶:update數據庫
1) username@’主機域’
2)主機域:能夠理解爲是MySQL登錄的白名單
3)主機域格式:vim
’10.0.0.51’ ’10.0.0.5%’ ’10.0.0.%’ ’10.0.%.%’ ’10.%.%.%’ ‘%’ ‘db01’ ’10.0.0.51/255.255.255.0’
剛裝完MySQL數據庫該作的事情安全
[root@db02 mysql-5.7.20]# mysqladmin -uroot -p password ‘oldboy123’
[root@db02 mysql-5.7.20]# mysql -uroot -p123
第一種方法: mysql> grant all on *.* to root@'%' identified by '123' with grant option; 第二種方法: 誤刪除root用戶解決方法1: 1)中止數據庫 [root@db02 ~]# /etc/init.d/mysqld stop 2)跳過受權表,跳過網絡啓動數據庫 [root@db02 ~]# mysqld_safe --skip-grant-tables --skip-networking & 3)鏈接數據庫 [root@db02 ~]# mysql 4)插入新root用戶 insert into mysql.user values ('localhost','root',PASSWORD('123'), 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '',0,0,0,0,'mysql_native_password','','N'); 5)重啓MySQL [root@db01 ~]# mysqladmin shutdown [root@db01 ~]# /etc/init.d/mysqld start Starting MySQL. SUCCESS! ----------------------------------------------------------------------------- 誤刪除root用戶解決方法2: 1)中止數據庫 [root@db02 ~]# /etc/init.d/mysqld stop 2)跳過受權表,跳過網絡啓動數據庫 [root@db02 ~]# mysqld_safe --skip-grant-tables --skip-networking & 3)鏈接數據庫 [root@db02 ~]# mysql 4)刷新受權表 mysql> flush privileges; 5)建立root超級用戶 mysql> grant all on *.* to root@'localhost' identified by '123' with grant option;
1.mysqladmin -uroot -p123 password '1' 2.update mysql.user set password=password('123') where user='root' and host='localhost'; 3.set password=password('1'); 修改當前用戶的密碼 4.grant all on *.* to 'root'@'localhost' identified by '123';
1.中止MySQL [root@db01 data]# /etc/init.d/mysqld stop 2.跳過受權表,安全啓動 [root@db01 data]# mysqld_safe --skip-grant-tables --skip-networking & 3.鏈接數據庫 [root@db01 data]# mysql 4.update修改密碼 mysql> update mysql.user set password=password('567') where user='root' and host='localhost'; 5.刷新受權表 mysql> flush privileges; 6.重啓數據庫 [root@db01 data]# /etc/init.d/mysqld restart 7.使用新密碼連接數據庫 [root@db01 data]# mysql -uroot -p567
mysql> create user oldboy@'10.0.0.%' identified by '123';
mysql> select user,host from mysql.user;
mysql> drop user oldboy@‘10.0.0.%’;
mysql> set password mysql> update user set password=PASSWORD('oldboy123') where user='root' and host='localhost'; mysql> grant all privileges on *.* to oldboy@’10.0.0.%’ identified by ‘123’;
MySQL的權限定義:
做用對象:庫、表服務器
INSERT,SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE
grant all privileges on *.* to oldboy@’10.0.0.%’ identified by ‘123’; 權限 做用對象 歸屬 密碼
. [當前MySQL實例中全部庫下的全部表]
wordpress.* [當前MySQL實例中wordpress庫中全部表(單庫級別)]
wordpress.user [當前MySQL實例中wordpress庫中的user表(單表級別)]
grant select(user,host) on mysql.user to 'rep'@'%' identified by '123'; [當前MySQL實例中wordpress庫中的user表的user和host列(單列級別)]網絡
開發人員說:請給我開一個用戶
溝通:併發
#通常給開發建立用戶權限 grant select,update,delete,insert on *.* to xly@’10.0.0.%’ identified by ‘123’;
思考下面場景:
開發:你把root用戶給我唄?
#建立wordpress數據庫 create database wordpress; #使用wordpress庫 use wordpress; #建立t一、t2表 create table t1 (id int); create table t2 (id int); #建立blog庫 create database blog; #使用blog庫 use blog; #建立t1表 create table tb1 (id int);
一、grant select on *.* to wordpress@’10.0.0.5%’ identified by ‘123’; 二、grant insert,delete,update on wordpress.* to wordpress@’10.0.0.5%’ identified by ‘123’; 三、grant all on wordpress.t1 to wordpress@’10.0.0.5%’ identified by ‘123’;
1)MySQL自帶的鏈接工具
mysql
常見的特定於客戶機的鏈接選項:
-u:指定用戶 -p:指定密碼 -h:指定主機 -P:指定端口 -S:指定sock -e:指定SQL --protocol=name:指定鏈接方式
2)第三方的鏈接工具
sqlyog、navicat
應用程序鏈接MySQL
注意:須要加載對應語言程序的API
1) socket鏈接
mysql -uroot -poldboy123 -S/application/mysql/tmp/mysql.sock mysql -uroot -poldboy123
2) TCP/IP
mysql -uroot -poldboy123 -h10.0.0.51 -P3306
問題:你怎麼判斷你的MySQL數據庫能夠對外提供服務?

/etc/init.d/mysqld start ------> mysqld_safe ------> mysqld
/etc/init.d/mysqld stop mysqladmin -uroot -poldboy123 shutdown kill -9 pid ? killall mysqld ? pkill mysqld ?
出現問題:
可經過以下地址查看,生產高併發環境野蠻粗魯殺死數據庫進程致使故障企業案例:
625某電商網站數據庫宕機故障解決實錄(上)
625某電商網站數據庫宕機故障解決實錄(下)
場景:我要啓動實例
問題:
1)我不知道個人程序在哪?
2)我也不知道我未來啓動後去哪找數據庫?
3)未來我啓動的時候啓動信息和錯誤信息放在哪?
4)我啓動的時候sock文件pid文件放在哪?
5)我啓動,大家給了我多少內存?
...
N)我還有不少問題須要在我啓動以前告訴我,emmmmm....

1)預編譯:cmake去指定,硬編碼到程序當中去
2)在命令行設定啓動初始化配置
--skip-grant-tables --skip-networking --datadir=/application/mysql/data --basedir=/application/mysql --defaults-file=/etc/my,cnf --pid-file=/application/mysql/data/db01.pid --socket=/application/mysql/data/mysql.sock --user=mysql --port=3306 --log-error=/application/mysql/data/db01.err
3)初始化配置文件(/etc/my.cnf)
配置文件讀取順序:
/etc/my.cnf /etc/mysql/my.cnf $MYSQL_HOME/my.cnf(前提是在環境變量中定義了MYSQL_HOME變量) defaults-extra-file (相似include) ~/my.cnf --defaults-file:默認配置文件 若是使用./bin/mysqld_safe 守護進程啓動mysql數據庫時,使用了 --defaults-file=<配置文件的絕對路徑>參數,這時只會使用這個參數指定的配置文件。
思考:
#cmake: socket=/application/mysql/tmp/mysql.sock #命令行: --socket=/tmp/mysql.sock #配置文件: /etc/my.cnf中[mysqld]標籤下:socket=/opt/mysql.sock #default參數: --defaults-file=/tmp/a.txt配置文件中[mysqld]標籤下:socket=/tmp/test.sock
socket文件會生成在哪???文件名叫什麼???
優先級結論:
初始化配置文件功能
1)影響實例的啓動(mysqld)
2)影響到客戶端
mysql mysqldump mysqladmin
如何配置初始化配置文件
1)配置標籤分類
[client]全部客戶端程序 mysql mysqldump ... [server]全部服務器程序 mysqld mysqld_safe ...
1)多套後臺進程+線程+內存結構
2)多個配置文件
3)多套數據
#建立數據目錄 [root@db01 ~]# mkdir -p /data/330{7..9} #建立配置文件 [root@db01 ~]# touch /data/330{7..9}/my.cnf #編輯3307配置文件 [root@db01 ~]# vim /data/3307/my.cnf [mysqld] basedir=/application/mysql datadir=/data/3307/data socket=/data/3307/mysql.sock log_error=/data/3307/mysql.log log-bin=/data/3307/mysql-bin server_id=7 port=3307 [client] socket=/data/3307/mysql.sock #編輯3308配置文件 [root@db01 ~]# vim /data/3308/my.cnf [mysqld] basedir=/application/mysql datadir=/data/3308/data socket=/data/3308/mysql.sock log_error=/data/3308/mysql.log log-bin=/data/3308/mysql-bin server_id=8 port=3308 [client] socket=/data/3308/mysql.sock #編輯3309配置文件 [root@db01 ~]# vim /data/3309/my.cnf [mysqld] basedir=/application/mysql datadir=/data/3309/data socket=/data/3309/mysql.sock log_error=/data/3309/mysql.log log-bin=/data/3309/mysql-bin server_id=9 port=3309 [client] socket=/data/3309/mysql.sock #初始化3307數據 [root@db01 ~]#/application/mysql/scripts/mysql_install_db \ --user=mysql \ --defaults-file=/data/3307/my.cnf \ --basedir=/application/mysql --datadir=/data/3307/data #初始化3308數據 [root@db01 ~]#/application/mysql/scripts/mysql_install_db \ --user=mysql \ --defaults-file=/data/3308/my.cnf \ --basedir=/application/mysql --datadir=/data/3308/data #初始化3309數據 [root@db01 ~]#/application/mysql/scripts/mysql_install_db \ --user=mysql \ --defaults-file=/data/3309/my.cnf \ --basedir=/application/mysql --datadir=/data/3309/data #修改目錄權限 [root@db01]# chown -R mysql.mysql /data/330* #啓動多實例 [root@db01]# mysqld_safe --defaults-file=/data/3307/my.cnf & [root@db01]# mysqld_safe --defaults-file=/data/3308/my.cnf & [root@db01]# mysqld_safe --defaults-file=/data/3309/my.cnf & #查看server_id [root@db01]# mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'" [root@db01]# mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'" [root@db01]# mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'"