A PythonOperator using the MySqlHook should do the trick. Oh and you can call a PHP script from BashOperator.
HN user
mistercrunch
One of the major difference is how tasks are defined. In Luigi, you have to derive a base task class to create a task. In Airflow you instantiate a task by calling an operator (you can think of an operator as a task factory). If generating tasks dynamically is important to you, Airflow is a better option in that regard since you'd have to do meta-programming on the Luigi side.
Data engineering is moving in a direction where pipelines are generated dynamically. "Analysis automation", "analytics as a service", "ETL frameworks" require dynamic pipeline generation. Providing services around aggregation, A/B testing and experimentation, anomaly detection and cohort analysis require metadata-driven pipeline generation.
Airflow is also more state aware where the job dependencies are kept of for every run independently and stored in the Airflow metadata database. The fact that this metadata is handled by Airflow makes it much easier to say- rerun a task and every downstream tasks from it for a date range. You can perform very precise surgery on false positive/ false negative and rerun sub sections of workflow in time easily.