Nhân bản user trong mysql
Mysql
40
Male avatar

manhdung viết ngày 27/05/2015

Vấn đề

Đôi lúc trong việc quản trị database, tôi phải chuyển user database từ nơi này sang nơi khác. Nhưng phần thông tin user mà web application sử dụng để truy cập các database thì nằm hết trong system table mysql.user Không phải lúc nào chúng ta cũng có thể bê nguyên xi toàn bộ database sang được. Vài lý do mà tôi không làm thế như: hệ cơ sở dữ liệu khác nhau, cái cũ dùng mysql, cái sau lại dùng mariadb hoặc sự sai biệt về phiên bản của cùng một hệ cơ sở dữ liệu. Nói chung là nếu có những sai biệt về cấu trúc của system table thì không nên bê nguyên sang.

Trong khuôn khổ bài viết này tôi không viết toàn bộ quá trình di chuyển database. Tôi sẽ chỉ giới hạn trong việc giải quyết vấn đề làm thế nào để di chuyển toàn bộ thông tin user của web application dùng sang cơ sở dữ liệu mới.

Cách giải quyết

Tôi thường dùng hai cách:

  • Cách 1: Thủ công nhất. Khi chưa biết đến cách hai, tôi đã phải dùng cách này. Nhưng cũng may hồi đó số lượng user phải nhân bản là còn ít :D

Ví dụ: Tôi cần clone user 'test'@'1.2.3.4'
Trên database cũ, tôi thực hiện

show grants for 'test'@'1.2.3.4'\G
*************************** 1. row ***************************
Grants for test@1.2.3.4: GRANT USAGE ON *.* TO 'test'@'1.2.3.4' IDENTIFIED BY PASSWORD '<hash passwd>'
*************************** 2. row ***************************
Grants for test@1.2.3.4: GRANT ALL PRIVILEGES ON `test_db`.* TO 'test'@'1.2.3.4'

Tôi sẽ lấy được hai thông tin cần là:
hash password và grant của user 'test'@'1.2.3.4'

Trên database mới, tôi thực hiện

create user 'test'@'1.2.3.4' identified by password '<hash passwd>' 
grant all privileges on `test_db`.* to 'test'@'1.2.3.4';

Create user trong mysql có hai biến thể:

create user 'username'@'ip' identified by 'plain passwd';
create user 'username'@'ip' identified by password 'hash passwd';

Biến thể thứ hai rất hữu ích trong trường hợp này. Tôi có thể nhân bản user mà không cần biết password của user đó thực sự là gì.

  • Cách 2: Hoàn toàn tự động. Tôi sử dụng một tool trong bộ percona-toolkit Trên database cũ, tôi chỉ thực hiện:
pt-show-grants --host localhost --user root --password '<passwd>' > mysql_cloned_users.sql

Toàn bộ các user có trong mysql.user sẽ được đẩy ra thành các statement tương tự như cách 1. Việc còn lại chỉ là import script sql này trên database mới

mysql -u root -p < mysql_cloned_users.sql
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

Male avatar

manhdung

44 bài viết.
239 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
Male avatar
67 11
Giới thiệu RabbitMQ là một message broker ( messageoriented middleware) sử dụng giao thức AMQP Advanced Message Queue Protocol (Đây là giao thức ph...
manhdung viết hơn 2 năm trước
67 11
Male avatar
45 4
Giả định bạn tiếp nhận một server mới toanh, bạn cần tìm một số thông tin về nó như loại CPU, loại main, loại memory, memory dùng của hãng nào... c...
manhdung viết hơn 1 năm trước
45 4
Male avatar
38 7
Giới thiệu MongoDB là một giải pháp nosql database. Data được lưu ở dạng các bson document. Hỗ trợ vertical scaling và horizontal scaling, dynamic...
manhdung viết hơn 2 năm trước
38 7
Bài viết liên quan
Male avatar
19 0
Mysql innodb internal là một chủ đề khá sâu. Bản thân tôi cũng chưa bao quát hết. Bài viết này chỉ cung cấp một cái nhìn sơ lược. Để các bạn khôn...
manhdung viết hơn 2 năm trước
19 0
White
23 2
(Ảnh) Tiêu đề chỉ là câu khách :v, thực ra là có một vài điểm về mysql explain mà chắc chưa nhiều bạn biết, tớ cũng hay quên nên note lại cho nhớ ...
LinhPT viết hơn 2 năm trước
23 2
White
2 2
Đôi khi cài đặt MySQL trên Ubuntu hoặc trên các HĐH khác, trình cài đặt sẽ tự động set một mật khẩu ngẫu nhiên cho tài khoản root, nếu không để ý t...
Dang Viet Ha viết gần 2 năm trước
2 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


Male avatar
{{userFollowed ? 'Following' : 'Follow'}}
44 bài viết.
239 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!